2020-06-21に更新

Kifu for JS を改造しようぜ☆(^~^)

あっぱっぱあ☆(^~^) ぴょっほー☆(^~^) 公開下書き

2020-06-17(tue)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Kifu for Type Script だろ☆ よく Kifu for JS なんて名乗るよな☆ いつからマイクロソフトの独自実装が幅を利かせてるんだぜ☆ この作者とは友達にはなれない☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 取るに足らない 細かい違いだろう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 全部 Java Script に書き戻すの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 編集合戦は不毛なんで ブランチで……☆」

nodejs

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 最新の推奨版 nodejs をインストールしておこうぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 パッケージのリストを更新するかだぜ☆」

20200616dr57.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 アップデートすると コードが動かなくなるかも知れないが やるなら一発目だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 というか もう ncu -u を叩いたよな☆ -u オプションをまだ付けてはいけないのに……☆」

20200616dr57a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 deprecated deprecated deprecated ……、舐めてる……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 アップデートするから……☆」

20200616dr57a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 一体何が……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 何がもカニがも アップデートなんかするからよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Kifu for JS の作者に合わせてアップデートしないという選択肢は わたしには無いぜ☆ そんな足並みを揃えるプログラマーとはわたしは友達にはなれない☆
プログラマーの敵は仲良しごっこだぜ☆
書きかえたろ☆」

20200616dr57a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ コマンドラインが ぱっと見 Linux系 みたいに見えるが Windows のコマンドラインに 書きかえてみるか……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんで マイクロソフト系のOSに書きかえてしまうんだぜ……☆ Windows Power shell とかいう もっさりした延命を続ける遺物☆」

20200616dr57a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 頭に node と付けたらどうだぜ☆?」

20200616dr57a6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ わたしは もうダメかも知らん……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 インストールの案内が出てるわよ! npm i -D webpack-cli と打ちなさい!」

20200616dr57a7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ さて、どうなったか……☆」

20200616dr57a8.png

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んが アップデート したせいだと思う☆
CleanWebpackPlugin は昔はコンストラクターだったが、今はコンストラクターじゃないんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 調べて直したろ☆ 低バージョンに 足並みなど揃えていられない☆」

https://webpack.js.org/

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ここが公式だろうか……、知らんけど……☆」

https://webpack.js.org/guides/development/#using-watch-mode

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ このページに何か書いてるぜ☆」

20200616dr57a9.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Visual Studio Code では操作のヒントが出てくるから 見逃すなだぜ☆ [Ctrl] + クリック で問題個所に飛べるぜ☆
トップ・ディレクトリーに置いてある webpack-dev-server.js の書き方に deprecated か何かが混じってるんだな☆」

20200616dr57a10.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こうすりゃいいのかだぜ☆? 知らんけど……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 CleanWebpackPlugin はコンストラクターではないと言ってるのに……☆」

20200616dr57a11.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ デストラクチャー して、こうか☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 HtmlWebpackPlugin とか要らんもん付けたと思う☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それも消す☆ npm run start ☆」

20200616dr57a12.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 うわっ☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 目の前をブラウザが飛んできたんだけど!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 よくある ローカルホストに立ったWebサイトだぜ☆
しかし ディレクトリが見えていて かっこ悪いな……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 セキュリティ意識とは☆」

20200616dr57a13.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エラーがいっぱいある……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んが アップデートしたからな☆」

20200616dr57a14.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なんで モジュールが見つからないんだぜ☆! development モードじゃないというのかだぜ☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そうなんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 [Ctrl] + [C] で サーバー止めて……☆」

20200616dr57a15.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 npm run build ……☆ 今度は何だぜ☆!」

Error: webpack.optimize.UglifyJsPlugin has been removed, please use config.optimization.minimize instead.

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ もう削除されてるプラグインを使ってんじゃないの?」

20200616dr57a16.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 こんな deprecated コードばっか残して……☆ 最終更新日はいつだぜ☆!」

KIFUWARABE_80x100x8_01_Futu.gif
「 8日前だぜ☆」

https://webpack.js.org/plugins/uglifyjs-webpack-plugin/
https://webpack.js.org/configuration/optimization/

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 公式ページ見ても何の参考にもならん……☆ 難読化コードなんじゃないか☆?」

20200616dr57a17.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ common.plugins.push(new webpack.optimize.UglifyJsPlugin()); をコメントアウトするのは確定として……☆
please use config.optimization.minimize instead. がどうすりゃいいのか分からん☆ 別に 難読化しなくてもいいか……☆」

20200616dr57a18.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エラーが取れんなあ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んが アップデートするから……☆」

Cannot find module babel-preset-es2015

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 現象が似ている記事はこれか……☆」

npm install --save-dev @babel/preset-env

# Deprecated.
# npm install --save-dev @babel/preset-es2017

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 変化なし……☆」

20200616dr57a19.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この2行を消してみるかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 やるしか☆!」

20200616dr57a20.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ .babelrc にもあったのでコメントアウト☆」

20200616dr57a21.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エラー・メッセージが変わったぜ☆」

Error: The 'decorators' plugin requires a 'decoratorsBeforeExport' option, whose value must be a boolean. If you are migrating from Babylon/Babel 6 or want to use the old decorators proposal, you should use the 'decorators-legacy' plugin instead of 'decorators'.

React-MobX Error: The 'decorators' plugin requires a 'decoratorsBeforeExport' option, whose value must be a boolean

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 対応方法は調べりゃ出てくるぜ☆」

npm install --save-dev @babel/plugin-proposal-decorators 

20200616dr57a22.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ どんどん勝手に書き換え☆」

20200616dr57a23.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ はい、エラー☆」

Error: Multiple configuration files found. Please remove one:
     - package.json
     - C:\Users\むずでょ\source\repos\kifu-for-js\.babelrc

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ 設定ファイルが複数あるから、どっちか1つ消せって言ってるわよ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ .babelrc 消そうぜ☆」

20200616dr57a24.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ はい、また別のエラー☆」

Error: Cannot find module 'babel-preset-react-app' from 'C:\Users\むずでょ\source\repos\kifu-for-js'

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ お父んが消したファイルに書いてあったやつだぜ☆」

Cannot find module babel-preset-react-app/node_modules/@babel/runtime/helpers/slicedToArray #7183

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 調べるか……☆」

npm add @babel/runtime

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 変化なし……☆」

npm install babel-preset-react-app

Output:

    ERROR in ./src/index.tsx
    Module build failed (from ./node_modules/babel-loader/lib/index.js):
    Error: [BABEL] C:\Users\むずでょ\source\repos\kifu-for-js\src\index.tsx: Using `babel-preset-react-app` requires that you specify `NODE_ENV` or `BABEL_ENV` environment variables. Valid values are "development", "test", and 
"production". Instead, received: undefined. (While processing: "C:\\Users\\むずでょ\\source\\repos\\kifu-for-js\\node_modules\\babel-preset-react-app\\index.js")

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エラーメッセージが変わったぜ☆」

Cannot find module babel-preset-react-app/node_modules/@babel/runtime/helpers/slicedToArray #7183

export NODE_ENV=development
export BABEL_ENV=$NODE_ENV

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ おっと、これは Linux系の書き方だぜ☆」

set NODE_ENV=development
set BABEL_ENV=%NODE_ENV%

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ あれっ? 効かねっ☆?!」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んが使っているのは クソ・ターミナル Power shell なんで☆」

$NODE_ENV = "development"
$BABEL_ENV = ${NODE_ENV}

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 全く 効き目なし☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Windows ユーザー向けの情報が足りてないぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んが Windows なんか使ってるから……☆」

BABEL_ENV issue when running npm test in React App

20200616dr57a25.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Linux系と互換しなくなるが、Windowsの書き方をベタ書きで 乗り越えるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 あーあ、Windowsに依存するクソ・コードだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 プル・リクエストはお断りのやつね」

    ERROR in ./src/Kifu.tsx
    Module build failed (from ./node_modules/ts-loader/index.js):
    Error: TypeScript emitted no output for C:\Users\むずでょ\source\repos\kifu-for-js\src\Kifu.tsx.
        at makeSourceMapAndFinish (C:\Users\むずでょ\source\repos\kifu-for-js\node_modules\ts-loader\dist\index.js:88:18)
        at successLoader (C:\Users\むずでょ\source\repos\kifu-for-js\node_modules\ts-loader\dist\index.js:74:9)
        at Object.loader (C:\Users\むずでょ\source\repos\kifu-for-js\node_modules\ts-loader\dist\index.js:25:5)
     @ ./src/index.tsx 9:0-26 29:33-37

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エラーは まだまだ あるぜ☆」

[Webpack4.0] エラー解決集

tsconfig.json:

    "noEmitOnError": false,

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ true を false に変更☆」

ERROR in ./src/Kifu.tsx
    Module not found: Error: Can't resolve 'react-dnd-multi-backend/lib/HTML5toTouch' in 'C:\Users\むずでょ\source\repos\kifu-for-js\src'
     @ ./src/Kifu.tsx 21:0-68 150:48-60
     @ ./src/index.tsx

20200616dr57a26.png

react-dnd-multi-backend looking for cjs on latest version (v4.0.0) #34

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そんなものは無い系のエラーだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んが アップデートするから……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 こんなん使い続けてるんだったら 最近のコード知らんのだろう☆」

react-dnd-multi-backend

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 最近のコードをキャッチアップしたいところだが、大改造は嫌なんで レガシーを調べるぜ☆」

import HTML5toTouch from 'react-dnd-multi-backend/dist/esm/HTML5toTouch';

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ひとまず ESM へ逃げる☆」

WARNING in ./node_modules/react-dnd-multi-backend/dist/esm/HTML5toTouch.js 9:13-25
    "export 'TouchBackend' was not found in 'react-dnd-touch-backend'
     @ ./src/Kifu.tsx
     @ ./src/index.tsx

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エラーメッセージが変わったぜ☆」

Troubleshooting

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Kifu for JS がいつのバージョンの書き方してんのか 出てこないな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まるごと 一から書き直すか、棋譜をドラッグ&ドロップする機能を消すか……、よし、消そう☆
こんなクソ・コードの面倒を見ているメリットがないぜ☆」

   WARNING in ./src/index.tsx 29:33-37
    "export 'default' (imported as 'Kifu') was not found in './Kifu'

    ERROR in C:\Users\むずでょ\source\repos\kifu-for-js\src\index.tsx
    [tsl] ERROR in C:\Users\むずでょ\source\repos\kifu-for-js\src\index.tsx(9,8)
          TS1192: Module '"C:/Users/\u3080\u305A\u3067\u3087/source/repos/kifu-for-js/src/Kifu"' has no default export.

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 次のエラー☆」

Module 'xxx' has no default export.といわれるとき

// import Kifu from "./Kifu";
import * as Kifu from "./Kifu";

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 書きかえて逃げる☆」

  ERROR in C:\Users\むずでょ\source\repos\kifu-for-js\src\index.tsx
    [tsl] ERROR in C:\Users\むずでょ\source\repos\kifu-for-js\src\index.tsx(35,21)
          TS2604: JSX element type 'Kifu' does not have any construct or call signatures.

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 次のエラー☆」

JSX element type does not have any construct or call signatures in v3.2.0-rc #28631

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そろそろ 調べる時間が無くなってきたな……☆」

20200616dr57a27.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 勘で export 付けたろ☆」

20200616dr57a28.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エラーが出ているのでコメントアウト☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ダメだぜ、動かない……☆」

2020-06-18(wed)

https://ja.reactjs.org/

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ React の仕様を読もうぜ☆?」

class HelloMessage extends React.Component {
  render() {
    return (
      <div>
        Hello {this.props.name}
      </div>
    );
  }
}

ReactDOM.render(
  <HelloMessage name="Taylor" />,
  document.getElementById('hello-example')
);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 本来は これぐらい簡単な書き方をするらしいぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 しかし Kifu for JS は TypeScript なんで 別の知識が要るぜ☆」

20200617dr58.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 適当に書きかえて実行してみようぜ☆?」

20200617dr59.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ このディレクトリーが出てくるのは何なんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 知らね☆」

20200617dr60.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Webpack というフレームワークに全てを丸投げしているようだから、その設定ファイルと思う webpack.config.js
エントリー・ポイントが書かれているだろ☆
この設定ファイルは TypeScript ではなく JavaScript であることから、Webpack の仕事は TypeScript を JavaScript に変換することだと思うぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 したがって webpack.config.js から辿れるはずで、 ./src/index.tsx は、ブラウザでアクセスしたときに表示されるページを担当していると予想を立てるぜ☆」

20200617dr61.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ で、 ./src/index.tsx を見てみると さっき分からん、と思っていたファイルだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ お父んは 玄関開けたら すぐ分からん かだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 それで なんで ディレクトリーのリストが出てくんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まったく分からないぜ☆」

20200617dr62.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ webpack-dev-server.js --open に丸投げしているので、こいつが何をやっているかだぜ☆」

20200617dr63.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ HTMLソースから逆探知したろ☆」

20200617dr64.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ Java Script が難読化コードになってないから、React は動いてないんじゃないの?」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んが 壊したのかも知れない☆」

.icon-application-javascript

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 特徴的な文字列で、 Cドライブ全体を検索な☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 すぐには見つからないようだな☆」

20200617dr65.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 npm run start すると webpack-dev-server.js --open が走って、上図の2つの Node.js: Server-side JavaScript というのがスポーンされてくるんで、
こいつらがやってるに違いないぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Google クロームがやってるかも……☆」

20200617dr67.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Firefox でも Google クロームでも同じで、 React は動いていないとすると NodeJS のデフォルトのエラー画面かだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 デフォルトで ディレクトリー・リストを表示されたら 大惨事よ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 404 Not Found なのか、 Internal Server Error なのかなんなのか 表示して欲しいよな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ログは どこかに残されていないのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 他人のフレームワークなんか知らね☆」

20200617dr68.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 無いもんが どうやって出てくるんだぜ☆?」

20200617dr69.png

webpack-dev-server

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ webpack-dev-server が悪いんじゃないか☆? 何をしてるんだぜ こいつは☆?」

DevServer
Development

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この不愉快なセッティングを見直すかだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 書き方がぜんぜん違う☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 webpack-dev-server は必要なのかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 さあ……☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これ以上 Kifu for JS の不快なコードと付き合うのは嫌なので、 React を一から書き直そうぜ☆」

React Tutorial

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ w3css を使って、ふつうの書き方を覚えようぜ☆?」

npm install -g create-react-app

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ react をインストール☆」

npx create-react-app myfirstreact

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ いわゆるプロジェクトを作成☆」

cd myfirstreact

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ プロジェクト・ディレクトリに降りて……☆」

  • /package-lock.json ファイルの削除
  • /node_modules フォルダーの削除
  • packages.json のリストから babel-jest パッケージを除外
npm install

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ packages.json に書いてあるパッケージをインストール☆」

20200617dr70.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ http://localhost:3000 にアクセス、はい、画面が出た☆ これぐらい さくっと できるもんだぜ☆」

20200617dr71a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ソースコードを編集して保存すると Webサイトにもすぐ反映されるぜ☆
Python flask や nodejs を使った今どきの Webサーバーという感じだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これで レガシーを用いた 苦労や 努力の安物のぼったくりから 開放されるぜ☆
苦労、努力に評価は一切 認めないぜ☆ 友だちごっこや オリジナリティ有る村の掟づくり は無しで☆」

20200617dr72.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この <App /> というやつが さっきの function App() と何か関係あるんだろ☆」

20200617dr73.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なるほど☆ これは Facebook も生産性が上がるというものだよな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Kifu for JS は けなしてたのに……☆」

20200617dr74a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Java Script の中に クォーテーション無しで HTMLタグみたいなやつを直接書けるみたいだぜ☆
ECMAScript のパーサーはどうなってんだろな☆?」

20200617dr75a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なるほど、 getElementById('root') というのは <div id="root"></div> に対応しているのかだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 <App />function App() の中身のことで、その中身は HTML みたいだったから、
HTMLのコードを そのまま放り込んでるのと同じじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 テンプレートだよな☆ Jinja2 と React、 どっちが便利かな、みたいな……☆
そういえば 会社は nodejs 嫌いだったから React 使えないな☆ やはりプログラムを覚えるなら独習だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 金に結びつかないスキルばかり伸ばして……☆」

React JSX

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ JavaScript の中に HTMLのタグみたいなのを打ち込んでるのは XMLのタグで、 JSX という名前の技術のようだな☆」

React Components

App.js:

import React from 'react';
import ReactDOM from 'react-dom';

class Car extends React.Component {
  render() {
    return <h2>Hi, I am a Car!</h2>;
   }
}

export default Car;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Car from './App.js';

ReactDOM.render(<Car />, document.getElementById('root'));

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これだけ書きゃ、HTMLの <Car /> タグのように振る舞うテンプレートとして使えるはずなんだぜ☆」

React Props

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Props の説明もあるぜ☆」

const myelement = <Car brand="Ford" />;

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こんな感じで <Car />Ford という文字を渡したいときは、brand という名前を付けて……☆」

class Car extends React.Component {
  render() {
    return <h2>I am a {this.props.brand}!</h2>;
  }
}

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Java Script の方で this.props.brand と書けば Ford という文字を受け取れるという仕組みだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 理解したか☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 理解したぜ☆」

class Car extends React.Component {
  render() {
    return <h2>I am a {this.props.brand}!</h2>;
  }
}

class Garage extends React.Component {
  render() {
    const carname = "Ford";
    return (
      <div>
      <h1>Who lives in my garage?</h1>
      <Car brand={carname} />
      </div>
    );
  }
}

ReactDOM.render(<Garage />, document.getElementById('root'));

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 2段渡しするときは、ダブル・クォーテーションを省くことに注意しろだぜ☆ 分かりきっているものは省くということだろう☆」

class Car extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return <h2>I am a Car!</h2>;
  }
}

ReactDOM.render(<Car model="Mustang"/>, document.getElementById('root'));

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ constructor があるときは、 props はこう書け、というサンプルだぜ☆」

React State

class Car extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      brand: "Ford",
      model: "Mustang",
      color: "red",
      year: 1964
    };
  }
  changeColor = () => {
    this.setState({color: "blue"});
  }
  render() {
    return (
      <div>
        <h1>My {this.state.brand}</h1>
        <p>
          It is a {this.state.color}
          {this.state.model}
          from {this.state.year}.
        </p>
        <button
          type="button"
          onClick={this.changeColor}
        >Change color</button>
      </div>
    );
  }
}

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ JSXの中で変数を使いたいときは、state という名前の変数を作る習わしらしいぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 で、ドラッグ&ドロップ は どう書くの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 w3cschool では触れられていないので、React の公式を探すかだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 別に 独自実装でも できるんだけどな☆」

ReactでDrag&Drop

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 2015 年にはもう やってる人がいるな☆」

How to Implement Drag and Drop Feature for Your React Component

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ いくつか候補を調べておこうぜ☆」

How To Use The HTML Drag-And-Drop API In React

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 楽なやつを選ばないとな☆」

The ultimate guide to drag and drop in React

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ どれが一番か 分からんな……☆」

2020-06-21(sun) 17:00

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何してたっけ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 ドラッグ&ドロップは React の標準的な方法がないから、ライブラリを探していたんだぜ☆」

https://react-dnd.github.io/react-dnd/about

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Kifu for JS が使ってるのは React DnD かだぜ☆ Kifu for JS の作者より上手く使ったろ☆」

20200621dr76.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この画面は Kifu for JS が表示されているのかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 再利用せずに 1から 書き直した方が 速いんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 時間を掛け過ぎだし、そうするぜ☆」

20200621dr77.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 一からダウンロードして ビルドしてみたが 失敗した☆ どの道ダメだったようだぜ☆」

<おわり>

何度でもクリック!→

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ の最近の記事