今までの参加した勉強会のメモを公開した
タイトルの通り。
とあるところでキャリアの成長に関してもっと情報公開して恥をかいていこうよということを言われ、まずは今まで参加した勉強会のメモとかを公開していくことから始めようと思った次第。
かなり雑な部分もあるがそこらへん指摘貰えれば直していきます。
まとめ終わったので再度公開します。
- PHP7 Casual Talks #1に参加してきた - いがにんのぼやき
- Sansan&Eight技術責任者のリアルトークイベントに参加してきた - いがにんのぼやき
- Sansan × Sony アプリ勉強会 - いがにんのぼやき
- エンジニアが知っておくべき最低限のアルゴリズム《基礎》に参加してきた - いがにんのぼやき
- PHP BLT #3に参加してきた - いがにんのぼやき
- 第3回CodeIQ感謝祭「春のエンジニアまつり」に参加してきた - いがにんのぼやき
- 再演 ~ 組織にテストを書く文化を根付かせる戦略と戦術 +αに参加してきた - いがにんのぼやき
- 管理画面チラ見せ♡ナイト #3に参加してきた - いがにんのぼやき
- Laravel勉強会 InnoCAFE#21に参加してきた - いがにんのぼやき
- 第4回CodeIQ感謝祭「CodeIQ夏の陣」に参加してきた - いがにんのぼやき
- HTML5 Conference 2016に参加してきた - いがにんのぼやき
- Test Engineers Meetup #1に参加してきた - いがにんのぼやき
- 第5回CodeIQ感謝祭「食欲とプログラミングの秋」に参加してきた - いがにんのぼやき
- AbemaTV DEVELOPER CONFERENCE 2016に参加してきた - いがにんのぼやき
- Rubyエンジニアが語る、2016年の振り返りとこれからに参加してきた - いがにんのぼやき
- RakSul Meetup #05 ~RubyBizグランプリ大賞を受賞した「ハコベル」のすべて~に参加してきた - いがにんのぼやき
- マッチングサービスの運営で大切にしていること【Product Marketing Meetup】に参加してきた - いがにんのぼやき
- Railsを使ってサービスの成長を継続させるぞ!(FiNC×みんなのウェディング)に参加してきた - いがにんのぼやき
- JapanTaxi×エニグモ×一休のモダンな環境へのリプレイスに関する勉強会に参加してきた - いがにんのぼやき
- コード改善 meetup #1に参加してきた - いがにんのぼやき
- 【一休 × bitFlyer】C#を使ったサービス開発の裏側に参加してきた - いがにんのぼやき
- YAP(achimon)C::Asia Hachioji 2016mid(2日目)に参加してきた - いがにんのぼやき
- Vue.js Tokyo v-meetup #4に参加してきた - いがにんのぼやき
- Ultra Beer Bash 2017に参加してきた - いがにんのぼやき
- HTML5 Conference 2017に参加してきた - いがにんのぼやき
- PHPカンファレンス 2017に参加してきた - いがにんのぼやき
まとめてみて分かったが熱量のあるものとないものでメモの質に大きく差があるなあと思った。
これからは公開することも意識してメモの質を上げたい。
2018年の目標
2018年に入って早2カ月。
今更ですが今年の目標を考えたいなーと。
なんで今更?
実は年末年始の時からこの時期だと思ってた。
そう、転職先が決まった時だ。
無事、4カ月という長い無職期間を経て転職先を決めた。
年末年始、人々が目標を書いているのを横目に僕は転職先が決まったら書こうと思ってた。
理由としては、転職先によって達成したい目標、達成しやすさって変わると思う。
それは事業的なミッションだったり、技術的な成長だったり、個人の趣味や人生についてだったり。
職場によってそれを達成する土壌があったり色々な要素が絡み合った上で目標を決めようと思ってた。
目標
- 一週間に一回は技術系記事を書く
- 二カ月に一回は登壇
- Microsoft MVPを受賞する
- TOIEC 600点
一週間に一回は技術系記事を書く
一週間仕事なり趣味で開発していれば気づきやつまずいたりしたときの対処など書くことはあるだろう。
無ければ技術的なことが出来ていない可能性が高い。
そういう自戒も込めつつ一週間に一回は記事を書けるように励みたい。
二カ月に一回は登壇
アウトプットの機会を増やしたい。
これは前述の記事と同様に気づきなどの棚卸の面と、記事を書く技術とは別の発表技術を学んでいきたい面もある。
ある程度露出を増やしつつ技術的に人に触れ合う機会も作りたいという面もある。
あと今まで登壇をしたことはあったけど身内に近いコミュニティや初心者向けが多かった。
なのでカンファレンスなどに登壇も目指していきたい。
Microsoft MVPを受賞する
これは前述の二つのアウトプットを継続的に行って目指していきたい。
Microsoft MVPとはいわゆる技術発信を行ってる人に対する表彰制度みたいなものである。
自薦他薦問わずエントリーでき、受賞すればMicrosoftから特定のソフトの提供や限定イベントへの参加権などを特典として貰える。
気になったらググってほしい。
特典が目的というわけではないが一つのアウトプットしていった結果としての目標としたいと思う。
TOIEC 600点
これは個人的なコンプレックス。
エンジニアでありながら英語が全くできないのでこれを克服していきたい。
全くできないというのは具体的にどんなレベルかというと、2015年12月に受験したときのスコアは355点である。
本当に大学を卒業しているんだろうか。僕のキャンパスライフは夢だったのかもしれない。
英語のページを見るときには常にGoogle翻訳を横に並べている。
エンジニアとしては英語で書かれた第一ソースを読めるか読めないかは成長に大きく変わってくる。
ここは努力していきたい。
最後に
目標立ててみた。
年末だけじゃなくて時折見返してうまく達成していこうと思う。
転職したばかりは忙しくて大変そうだが頑張っていこう。
Webpack4ではCLIが切り離された
Webpackの4からCLIが別に切り出された。
なのでそれ以前のWebpackと同じように実行するとエラーが発生する。
> [project name]@1.0.0 dev [working directory] > webpack The CLI moved into a separate package: webpack-cli. Please install 'webpack-cli' in addition to webpack itself to use the CLI. -> When using npm: npm install webpack-cli -D -> When using yarn: yarn add webpack-cli -D npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! time-management-matrix@1.0.0 dev: `webpack` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the time-management-matrix@1.0.0 dev script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\[user name]\AppData\Roaming\npm-cache\_logs\2018-02-28T18_56_30_320Z-debug.log
言われた通りインストールしてみる。
npm install webpack-cli -D
ちなみに-Dは--save-devらしい。
npm installのhelpに出てこないので知らんかった。
これでまたwebpackコマンドを打つとビルドが実行できるようになる。
今までの参加した勉強会のメモを公開することにした
再度まとめて記事を上げなおしたので上記参照。
Swagger EditorとSwagger UIをDockerで動かす
Swagger Editor
docker pull swaggerapi/swagger-editor docker run -d -p 81:8080 --name swe swaggerapi/swagger-editor
一部generator.swagger.ioから外部リソースを取得してるみたい。
初期表示のAPI仕様は外部から取得したファイルを表示しているよう。
今のSwagger Editorはここら辺を変更できなくて、後述のSwagger UIだと変更できるようだ。
Swagger UI
docker pull swaggerapi/swagger-ui docker run -d -p 82:8080 --name swu swaggerapi/swagger-ui
中身を見ているとDocker起動時に環境変数を設定することで一部パラメータを変更できるようになっている。
例えば下記のようにAPI_URLを設定することで表示に使用するJSONを変更したりできる。
docker run -d -p 82:8080 --name swu -e API_URL=http://generator.swagger.io/api/swagger.json swaggerapi/swagger-ui
2018/02/21現在での最新コミットではポートやOAUTH関係の環境変数が設定できるようになっている。
Docker使用時に走るdocker-run.shというファイルで環境変数を使った設定を行っている。 この環境変数に関するドキュメントがどこかにあれば教えてほしい。
こんな風にSWAGGER_JSONという環境変数にコンテナ内で存在するファイル名を指定してあげるとそれをSwager UIに表示することができる。
docker run -d -p 82:8080 --name swu -e "SWAGGER_JSON=/test.json" -v d:/Docker/swagger/test.json:/test.json swaggerapi/swagger-ui
docker-compose
docker-composeだとこんな感じ。
swagger-editor: image: swaggerapi/swagger-editor container_name: "xxx-swagger-editor" ports: - "8081:8080" swagger-ui: image: swaggerapi/swagger-ui container_name: "xxx-swagger-ui" ports: - "8082:8080" volumes: - ./swagger/test.json:/test.json environment: SWAGGER_JSON: /test.json
ElectronをWindowsのBash(WSL)で試してみて成功しなかった
毎度毎度の失敗談。
Electronを試してみたいと思って、可能ならばWindowのBashとして機能するWindows Subsystem for Linux上で実行したいと思って試してみた。
結局動かなかったけど。
詳しい方がいたら情報求む。
一応記録として残しておく。
まずは公式サイトのクイックスタートを試してみる
そもそもNode.jsが入っていなかったのでインストール
$ sudo apt-get install -y nodejs npm
Node.jsのバージョン管理ツールであるnを使ってみます。
$ sudo npm install -g n
実行する前にBashを一度閉じて再起動しておきます。
そうしないとエラーが発生しました。
$ sudo n stable install : node-v9.4.0 mkdir : /usr/local/n/versions/node/9.4.0 fetch : https://nodejs.org/dist/v9.4.0/node-v9.4.0-linux-x64.tar.gz ######################################################################## 100.0% installed : v9.4.0
$ node -v v9.4.0 $ which node /usr/local/bin/node $ npm -v 5.6.0 $ which npm /usr/local/bin/npm $
apt-getでインストールしたNode.jsとnpmは削除しておく。
$ sudo apt-get purge nodejs npm
Electronのサンプルアプリをcloneして実行してみる。
$ git clone https://github.com/electron/electron-quick-start $ npm install && npm start > electron@1.7.12 postinstall /mnt/d/Programming/JavaScript/electron-quick-start/node_modules/electron > node install.js npm notice created a lockfile as package-lock.json. You should commit this file. added 152 packages in 43.837s > electron-quick-start@1.0.0 start /mnt/d/Programming/JavaScript/electron-quick-start > electron . /mnt/d/Programming/JavaScript/electron-quick-start/node_modules/electron/dist/electron: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory npm ERR! file sh npm ERR! code ELIFECYCLE npm ERR! errno ENOENT npm ERR! syscall spawn npm ERR! electron-quick-start@1.0.0 start: `electron .` npm ERR! spawn ENOENT npm ERR! npm ERR! Failed at the electron-quick-start@1.0.0 start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/iganin/.npm/_logs/2018-02-10T14_29_04_074Z-debug.log
エラーが発生して実行が出来なかった。
ここからは延々と依存関係にあるパッケージをインストールしていくだけで、結局成功していないので注意
libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory
とあるのでインストールしてみるとエラーが変わった。
$ sudo apt-get install libgtkextra-dev
こんな感じで一つ一つ毎回エラーが変わって依存パッケージがないと出るのでそれが消えるまでインストールしていった。
存在しないと言われるファイル | インストールしたパッケージ名 |
---|---|
libX11-xcb.so.1 | libx11-xcb-dev |
libXtst.so.6 | libxtst6 |
libXss.so.1 | libxss1 |
libgconf-2.so.4 | libgconf-2-4 |
libnss3.so | libnss3-dev |
libasound.so.2 | libasound2 |
一部参考
上記をインストールしていったらエラーが出るがエラー詳細が出なくなり困った。
$ npm start > electron-quick-start@1.0.0 start /mnt/d/Programming/JavaScript/electron-quick-start > electron . npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! electron-quick-start@1.0.0 start: `electron .` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the electron-quick-start@1.0.0 start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/iganin/.npm/_logs/2018-02-10T14_59_57_523Z-debug.log
もうお手上げ状態。
下記のような記事を挙げている人がいて、上記のエラーと同等かは分からないが動作するようになっているらしい。
一度グローバルにElectronを入れてみる
一度グローバルにElectronコマンドをインストールしてそちらを叩けるか試してみた。
sudo npm install -g electron
$ sudo npm install -g electron [sudo] password for iganin: /usr/local/bin/electron -> /usr/local/lib/node_modules/electron/cli.js > electron@1.8.2 postinstall /usr/local/lib/node_modules/electron > node install.js /usr/local/lib/node_modules/electron/install.js:47 throw err ^ Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/electron/.electron' npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! electron@1.8.2 postinstall: `node install.js` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the electron@1.8.2 postinstall script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/iganin/.npm/_logs/2018-02-10T15_29_31_278Z-debug.log
エラーが発生した
sudo npm install -g electron --unsafe-perm=true --allow-root
これでインストールは出来た。
けどコマンドを実行しても何も表示されないという状況で謎。
結局
Windowsは難しい。
今度はWindows自体(Powershellとか)で実行できないか試してみようと思う。
WSLの問題なのかElectronの問題なのか・・・。
Windows関係、毎回失敗を繰り返しすぎて心が強くなっていくのを感じる。
Laravelのユーザー関係のルート定義がどこにあるか
Laravelにはユーザーを作成、認証する機能がある。
Laravel 5.4ではphp artisan make:auth
コマンドを打つと特定のコントローラーとビューに加えて、routes/web.phpにAuth::routes();
という記述が追加される。
このroutesメソッドでユーザー関係のルーティングが定義されるようだが、どこにあるかよく分からなかったので調べて見た。
まずはルート定義を確認
$ php artisan route:list +--------+-----------+------------------------------+----------------------+------------------------------------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+------------------------------+----------------------+------------------------------------------------------------------------+--------------+ | | GET|HEAD | home | home | App\Http\Controllers\HomeController@index | web,auth | | | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web,guest | | | POST | login | | App\Http\Controllers\Auth\LoginController@login | web,guest | | | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | web | | | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web,guest | | | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest | | | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController@reset | web,guest | | | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | web,guest | | | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | web,guest | | | POST | register | | App\Http\Controllers\Auth\RegisterController@register | web,guest |
こんな感じでユーザーに関するルーティングが追加されている。
Auth::routes()
Illuminate\Support\Facade\Auth
クラスにその定義が存在する。
<?php /** * Register the typical authentication routes for an application. * * @return void */ public static function routes() { static::$app->make('router')->auth(); }
$appはIlluminate\Foundation\Application
クラスである。
$app->make('router')はIlluminate\Routin\Router
クラスを返し、そのRouterクラスのauthメソッドに、今回のユーザー関係の定義が書かれている。
<?php /** * Register the typical authentication routes for an application. * * @return void */ public function auth() { // Authentication Routes... $this->get('login', 'Auth\LoginController@showLoginForm')->name('login'); $this->post('login', 'Auth\LoginController@login'); $this->post('logout', 'Auth\LoginController@logout')->name('logout'); // Registration Routes... $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); $this->post('register', 'Auth\RegisterController@register'); // Password Reset Routes... $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); $this->post('password/reset', 'Auth\ResetPasswordController@reset'); }
これがAuth::routes()
の正体である。
余談
ちなみにIlluminate\Routing\RoutingServiceProvider
に今回の$app->make('router')で生成されるインスタンスの定義はIlluminate\Routing\RoutingServiceProvider
に存在している。
DIコンテナの定義だ。
<?php /** * Register the router instance. * * @return void */ protected function registerRouter() { $this->app->singleton('router', function ($app) { return new Router($app['events'], $app); }); }
元々のサービスプロバイダーの登録もconfig/app.php
に定義してあるわけではなく、先ほどのApplicationクラスで行なっているようだ。
<?php /** * Register all of the base service providers. * * @return void */ protected function registerBaseServiceProviders() { $this->register(new EventServiceProvider($this)); $this->register(new LogServiceProvider($this)); $this->register(new RoutingServiceProvider($this)); }
このコアの実装は後々追って行きたい。