フレームワークの勉強方法を考えてみる

PHPのLaravelというフレームワークを学習したいとして、学習手順について考えてみたいと思います。
まず、大きくわけて以下のような考え方があると思います。

1. 必要な箇所のみWebで調べて、実装する
2. ドットインストールなど、学習サイトで基礎を勉強する
3. フレームワークの本を買って、本に沿って勉強する
4. フレームワークの勉強会に参加する
5. フレームワークの公式サイトから、ドキュメントを全部読む
6. 自分自身でフレームワークを触りながら、プロダクトを作って勉強する
7. フレームワークのgithub issuesを読む
8. フレームワークのossにコミットする

1. 必要な箇所のみWebで調べて、実装する
Googleで、調べたい内容のキーワードで検索をして、上位表示されているページの記事を複数読んで、ローカルでテストして動かします。
基本はこれの繰り返しで良いと思います。何故なら、最も効率的に時間を使えるから。
例えば、laravelのログイン機能の実装を調べたいとすれば、「laravel ログイン機能」と入力すれば、関連記事がずらずらと表示されます。1位表示されるということは、それだけ価値のある情報とみなされているので、素直にそれを読めばいいと思います。実際に、殆どこれで解決できるような気がします。

「laravel ログイン機能」で1位表示されている機能
https://www.ritolab.com/entry/51

2. ドットインストールなど、学習サイトで基礎を勉強する
フレームワークをゼロから学ぶ必要がある場合は、ドットインストールのレッスンがおススメです。フレームワークの基本的な機能を説明しているので、短時間で基礎を一通り学べます。
▽ドットインストール
https://dotinstall.com/
▽Laravel5.5
https://dotinstall.com/lessons/basic_laravel_v2
ただし、注意が必要なのは、レッスンの代表の田口元がマンパワーでつくってるので、内容が古いということがあります。Laravelは最新版が5.7ですが、まだ5.5なので、最新更新日を注意しなければなりません。また、フレームワークでも、phpとrailsぐらいしかなく、pythonやjavaなどその他の言語のコンテンツはあまりないので、その辺を勉強したい場合は、ドットインストールにはありません。
因みに私は、4,380レッスン完了して、全受講者中9位です。一時期、2位でした。プレミアム会員は月額980円なので費用対効果はいいと思います。

3. フレームワークの本を買って、本に沿って勉強する
本屋で、幾つか見て、自分に合いそうな本を買って勉強する方法です。私の場合、昔はこれが主流でしたが、最近はほとんど本は買いません。なぜなら、(1)情報が最新でない、(2)Webの方が見やすい、(3)持ち運びが重いから。本の出版だと、やはり少し前の情報なんですね。なので、お金だして買った割に、情報が古いとちょっとがっかりします。また、紙よりもwebの方が見やすい・使いやすいんですね。ソースコードなのどは、やはり、Web上で見た方がやりやすい。そして、なにより、持ち運びが重い。自宅よりも外で作業している時間の方が長いので、軽い方がいいです。

ただし、webで勉強したことを本屋で確認する、というのはよくやってます。

4. フレームワークの勉強会に参加する
LTの講師は、大体第一線のエンジニアが立つので、どれ位の知識が必要なのか、という意味では参考になりますが、これは、微妙ですね。なぜなら、勉強会に出たからといって、コーディングのスキルはあがらないから。
単純に、他社のオフィスに行けるのが楽しい、というのもあり、私は、一応、connpassとtechplayはチェックしていますが、そんなに勉強会には時間を割いていません。
https://connpass.com/
https://techplay.jp/
余裕ができたら、もっと勉強会に参加したいと思っています。

5. フレームワークの公式サイトから、ドキュメントを全部読む
これは凄いおススメ。teratailで質問すると、よく、公式のドキュメントを全部読め、と返ってくるが、周りのエンジニアでもスーパーエンジニアのような人は、何か課題があった時には、関連する記事を直ぐに公式のドキュメントをひっぱってくる。また、自分でカスタマイズする際にも、スキルのある人は、公式ドキュメントを良く読んでいる印象があります。
laravelのドキュメント
https://readouble.com/laravel/
難点としては、読むのに骨がおれる、時間がかかり大変、ということです。直接関係なさそうな記事も読まなければいけないため、長時間読み続けると、モチベーションが段々下がってきます。なので、細切れで学ぶなど工夫が必要かも。これは今後もやっていきたいですね。

6. 自分自身でフレームワークを触りながら、プロダクトを作って勉強する
これは最も重要かもしれません。自分でローカルで環境を作って、動かしながら、理解していく事が最重要だと思います。
ただし、これは、前工程に時間がかかる、という難点があります。
フレームワークを触る前に、つくるプロダクトの基本設計、詳細設計、画面設計、画面遷移、フロント部分などある程度つくっておかなければならないという点です。フレームワークの簡単な動作なら、別にデフォルトをインストールして基本動作を確認すれば良いですが、実践的な学習となると、それなりの設計がされたプロダクトでないと意味ありません。そのため、設計からキチンとやっていく必要があり、時間がかかる覚悟をしなければなりません。

7. フレームワークのgithub issuesを読む
最新の情報は、公式ではなく、githubでやりとりされているので、githubを見る癖をつけた方がいいですね。
https://github.com/laravel/laravel

8. フレームワークのossにコミットする
ここまでくれば、特にいうことはないでしょう。というか、このレベルまで早くいきたい。

ということで、つらつらと書いてきましたが、纏めると、効率的な学習法があるかもしれませんが、きちんとやるのであればフレームワークの学習には時間がかかる、ということでしょうか。
おススメの方法があったら教えてください。

お問い合わせ

エンジニアが断捨離するとこうなる

最近、持ち物を断捨離しました。カッコは買値です。

-iphone(10万)
-apple watch(2万)
-金庫(忘れた、2万くらい)
-デスク(1万)
-スーツ全部(20万くらい?)
-Yシャツ全部(不明)
-ネクタイ全部(1万くらい)
-革靴(3万)
-ベルト(忘れた)
-プログラミング関係の本(不明)
-服、ジャケット、ビンテージジーンズ(不明)
-抽象画の絵画(忘れた)
-万年筆(5千円)
-名刺入れ(千円?)
-香水(数千円)

iphoneとApple watchは売った。普通に捨てようかなーと思ってたんだが、じゃんぱらがサクッと30分くらいで買い取ってくれました。
apple watch シリーズ1を2万で買って1年以上使って、バンドや本体など使用感がありましたが1万5千円で買い取り。お得感あるね。iphone 6Sは画面が割れてたので1万3千円くらい。両方ともケース、仕様書などはそろってました。箱を取っておくといいですね。
■じゃんぱら: http://www.janpara.co.jp/
HPページに参考価格が出ますが、商品の状態や付属品などによって値段が変わってくるので、実際にお店に持っていった方がいいと思います。見積りを出してくれるので、気に入らなければ、売らない、と伝えることもできます。

ネクタイはdunhill、Armani、Lanvinなどブランドものばっかりでしたが、費用対効果的に数千円の為に売るのめんどーなので捨てました。万年筆、絵も小銭にはなったのかもしれんけど、特にいいかーって感じで破棄。Pythonの機械学習などの本はamazonに中古で出品してもだいたい定価とほぼ同じ値段で売れますけど、これも手間を考えると、まーいいかなって感じ。
例えばこれ。中古3350円と新品3450円と、100円しか変わらない!これ、ほかの業界からみたら凄いよね。

金庫は一人では持てないくらい重すぎたので、業者呼んで1万5千円払って、机と一緒に処分してもらいました。
昔はお金払って不用品処分するのってかなり抵抗あった。3~4万くらい払って買ったのに、金払って処分って阿保ちやうか、もったいないし、普通に捨てればよくない、と思ってた。
でも最近は考え方が変わって、捨てた方がメリットが大きいと感じたら、金払ってでも処分した方が、長期的には利益になる、と思って、思い切って捨てました。
相見積とったけど、地域の即日対応の業者を選択。全国対応の業者は、050-XXXX-XXXXの電話番号で、かけると数十分後に折り返しかかってくる。値段は1万強で大して変わらない。

絵の価値ってのはよくわらないな~ 個展とか行っても、なんでこの絵がこの値段なのかさっぱりわからない。ぱっと見、いいなと思って買うんだけど、感性が違うから、ぱっと見た印象と値段が合わない。だから売り方も難しい。その曖昧さがいいのかもしれないけど、私には理解できん。昔、ドバイから絵を数十ドルで買って、1万円強で売ったりしてたけど、なんか、手間の割にはって感じで別に面白くないんだよね。

リストの中ではスーツが一番高い。1着10万のスーツがあるからね。エンジニアってスーツいらないけど、スーツ着る機会はありそう、と躊躇して、断捨離するのもこのリストの中では一番最後。しかも、スーツって、基本2万以上で売ってるくせに、aokiや青山など、スーツ小売店は下取りだけで、買取やってないんだね。下取りやって、割引券を渡しているだけ。これっておかしくない?価値の減り方が尋常ではない。aokiとかを見てると、2万のスーツも5万のスーツも10万のスーツも同じ扱いなんだ。しかも、みんなスーツ着てるくせに、スーツ買取業者って極端に少ない。悩んだけど、結局スーツ買取業者に買取りの見積もり取ってもらうことに。
Webフォームで、写真とスーツの詳細を入力すると、数営業日でメールにレスが届く。
なんか、ブランドの買取相場の理由が色々書かれていたが、見積結果は、じゃーん、2着が200~400円、2着が買取り不可。 ※ちなみに10万のスーツは、需要はあるけど値段がつかないって言われた。
は?? え、これ、なにかの冗談でしょ? 400円って。。どういう商売なんだろうこれ。
流石にこれはあかんと思って、オークションに出したら、サクサクっと1万7千円で売れた。そうだよね、俺の感覚はそんなにおかしくない、と少し安心。
それにしても、スーツ業界って闇が深いな。そういえば、ユニクロもカジュアルなジャケットは売ってますが、スーツには深く手を出してないですよね。柳井さんって、非常にロジカルな経営者なので、なんかあるんだろうなーこれ。そーいえば、1着2万円で、2着目千円の利益のカラクリが未だによーわからん。

ついでに書類も色々整理。Web系のドキュメントは大体ネットに落ちてるので、思い切って捨てることに。
世の中、紙の取引は減ってるのに、行政関係は未だに紙ベースが主流ですね。公共サービスはペーパレス化がかなり遅れている気がします。
ということで、大分整理されました。

断捨離まとめ
– デジタル関係は欲しい人に売れば、想像してた値段より売れる、他のものに較べて減損しにくい
– 同じジャンルの商品を大量に扱ってる人に価値を見てもらえば市場価格で売れる
– スーツや洋服は袖通したら価値が減る、今後高値で買う必要は全くない
– サイズが大きな家具類は捨てにくい、買い取ってもらうにも、持ち運びのハードルが高く、売り方もわからない

知識があるものは、価値がわかるけど、知識がないと価値がわからんってことか。

エンジニアの聖地 渋谷Freeman cafe

エンジニアの聖地、Freeman cafeに行ってきた。隣との席が近いね。
エージェントの営業っぽい人が、フリーランスのメリットを力説してエンジニアを口説いて笑えた。
見た感じ、IT系の客が3~4割ってところか。コーディングするのはルノアールとかより心地よいかも。

ただ、客が多いから、本当に集中するなら、潰れそうなガラガラのカフェの方が集中できる。

Intel Xeon E312xx

Intel Xeon E312xx
インテルが作っている
https://ark.intel.com/ja/products/52269/Intel-Xeon-Processor-E3-1220-8M-Cache-3-10-GHz-

メモリサイズ:32 GB

パフォーマンス
コアの数
4
スレッド数
4
プロセッサー・ベース動作周波数
3.10 GHz
ターボ・ブースト利用時の最大周波数
3.40 GHz
キャッシュ
8 MB SmartCache
バススピード
5 GT/s DMI
TDP
80 W

CPUの性能を比較するには、コア数、スレッド数、プロセッサー・ベース動作周波数、ターボ・ブースと利用時の最大周波数、キャッシュ、バススピード、TDPなどを見ればよいのか。プログラミングの技術が重要かと思ってたけど、CPU、メモリなどコンピューターサイエンスの基礎知識はプロジェクトの意思決定していく上で、やはり重要なんだな。秋葉原いきたくなりますね。

Devopsとは何か?

DevOps(デブオプス)は、ソフトウェア開発手法の一つ。開発 (Development) と運用 (Operations) を組み合わせたかばん語であり、開発担当者と運用担当者が連携して協力する(さらに両担当者の境目もあいまいにする)開発手法

来型のソフトウェア開発と、インフラストラクチャ管理プロセスを使用するよりも速いペースで製品の進歩と向上を達成し、企業がアプリケーションやサービスを高速で配信できるように、文化的な基本方針、プラクティス、ツールが組み合わされている。

アジャイルみたいなものか。

Scrum Allianceとは

アジャイル開発手法には複数の手法あるいはプラクティスと呼ばれるものがありますが、その中で「スクラム」はもっともよく使われている手法として知られており、マイクロソフトやIBMをはじめ多くの企業がソフトウェア開発の現場で採用している。

そのスクラムを実践するための「スクラムガイド(Scrum Guide in Japanese)」が、スクラムの普及促進のための団体「Scrum Alliance」から公開

スクラム入門
正しくは、様々なプロセスや技術を取り込むことのできるフレームワークである。スクラムの役割は、複雑なプロダクト開発が可能なフレームワークを提供することで、開発プラクティスの効果を相対的に浮き彫りにし、改善することである。

スクラムの内容
スクラムフレームワークは、スクラムチームとその役割、タイムボックス、成果物、およびルールで構成される。
スクラムチームは、柔軟性と生産性の最適化を目指すものである。チームは、自己組織化しており、クロスファンクショナルであり、反復的に作業をする。
(略)
スクラムがタイムボックスを採用しているのは、規則的なリズムをつけるためである。タイムボックスには、リリース計画ミーティング、スプリント計画ミーティング、スプリント、デイリースクラム、スプリントレビュー、スプリントレトロスペクティブが含まれる。
(略)
ルールは、スクラムのタイムボックス、役割、および成果物を結びつけるものである。

—–
スクラム(英: Scrum)は、ソフトウェア開発における反復的で漸進的なアジャイルソフトウェア開発手法の1つである。この方法論は「柔軟かつ全人的なプロダクト開発ストラテジーであり、共通のゴールに到達するため、開発チームが一体となって働くこと」とされる。この方法論は、製品開発における伝統的な、シーケンシャルなアプローチとは大きく異なる。この方法論は、チームが自発的に組織だって行動することを可能にする。この自己組織化を実現するのは、すべてのチームメンバーが物理的に同じ場所にいること、あるいは密なオンライン共同作業を通じ、全員が日々直接会ってお互いにコミュニケーションをとり、プロジェクトにおける規律を守ることである。

スクラムのカギとなる基本原則は、プロジェクト開発の途中で、顧客は、要求や必要事項を変えられるという認識である。予想できない変更について、計画に基づく方法で対処することは、容易ではない。したがって、スクラムは経験に基づくアプローチを採用する。問題を十分に理解することも、定義することもできないので、現れた要求へ素早く対応するためのチームの能力を最大化することに集中する、というアプローチである。
—–

開発途中での仕様変更を認めるということでしょうか。こういう資格があること自体知らんかった。

apacheとnginxの比較

まず、nginx
[vagrant@localhost local]$ nginx -v
nginx version: nginx/1.14.0

あれ、入ってますね。
起動してみます。
[vagrant@localhost local]$ sudo service nginx start
nginx を起動中: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[失敗]
あ、ポート80はapacheが使ってるからか。

比較
Apacheは、プロセス駆動アーキテクチャでマルチプロセス。これは、各リクエストをプロセスに割り当てて処理を行う。リクエストが大量に来た際、プロセスが同時に起動するのでオーバーヘッドが非常に大きくなるというデメリットがある。

nginxは、イベント駆動アーキテクチャ、シングルスレッドモデル。 シングルスレッドでループ処理をまわし、キューに溜まったイベントを処理していく処理方式(イベントループ方式)(node.jsなどでも採用)。プロセス数はCPUコア数と基本的には同じに設定。

=>リクエストが多い場合は、単純にマルチプロセルの方が速そうだが。
>nginxの方が、処理が軽く、大量のリクエストを処理するのに向いている。
なに?なぜだ?

>nginxは、CPUリソースがたくさん必要な処理には向いていない。処理時間が長くなる処理を実行した際、そこでプロセスがブロックされてしまい処理能力が落ちてしまう。
これはシングルだから、納得できますね。

>NGINXは大量処理、スピード重視を徹底的に追求
同時アクセスはnginxの方が良いと書かれている。
う~ん、イマイチ納得いかない。

コマンドを変えてみるが、
[vagrant@localhost local]$ sudo nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

あかん

matlabとは

>>MATLAB(マトラボ)は、アメリカ合衆国のMathWorks社が開発している数値解析ソフトウェアであり、その中で使うプログラミング言語の名称

なるほど、機械学習に強いエンジニアだと、matlab使ってる人多いなー、という印象。
とりあえず、python行きましょうかね。

[vagrant@localhost ~]$ python -V
Python 2.7.14

[vagrant@localhost ~]$ python
Python 2.7.14 (default, Mar 12 2018, 22:03:33)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 3 + 2
5
>>> exit()

bluetooth mouseを使ってみる

Blue tooth 案外使いやすいかも。

M336はカチカチ音がうるさいので、気になりますが。

そういえば、次のiphoneは$700らしいですね。まー xよりiphone 8 64gbの方が売れてますからね~