【3週目】未経験からTECH::EXPERTでプログラミングやってみた

f:id:b1840943:20180520110709p:plain

 

だいぶスクールにも慣れてきて、そろそろ近くのランチは行き尽くした感が出てきました。なんか思ったより道玄坂周辺ってランチないですよね。前の職場は神田だったので安くて美味いランチがいっぱいあったんですが、渋谷は高いっす…。

 

また今週やったことを記録しようと思います。

 

テスト

ソフトウェアを作る上でコードを書く以上に重要なのがテストです。もちろんTECH::EXPERTのカリキュラムにしっかり組み込まれています。

 

なぜテストが必要なのかというと、一つは仕様漏れを減らせるからです。テストを書くとなると一つ一つ丁寧に機能を確認していくことが必要になります。その分開発時間は長くなりますが、エンジニアに抜けや漏れは許されません。

前職が産業機械メーカーだったので機械エンジニアと接する機会が多かったんですが(というか僕自身もエンジニアだったんですが)、もし彼らが仕様とは違うネジ一本でもつけてしまったら大惨事です。数千万の損害賠償が簡単に発生します。

 

ただソフトウェアのいいところは一回作動させてエラーが出たら修正すればいいってとこですね。機械を一回動かしてみて壊れました、はさすがに怒られますからね。ソフトウェアはむしろエラーばんばん出しながら開発していけるのでいいですよね。

 

もう一つのメリットはリファクタリングや機能追加がやりやすくなるという点です。テストをパスすればOKという明確な指標があるので、それさえ守れば何してもいいというのは気が楽です。

機能追加してどこにどう影響が出るかというのを全て把握することは実質無理なので、テストで完全に機能するということを担保すべきですね。

 

さて、カリキュラムではRSpecとFactoryGirlを使ってテストを書いていきます。

RSpecRailsでテストができるようになるgemで、FactoryGirlはユーザーログインテストなんかを簡単にできるようにしてくれます。

 

テストコードの書き方自体はより自然言語に近い感じなので理解しやすいですが、機能ごとに細かく書いて行ったりそもそもテスト全体を設計していくのはなかなか骨が折れる仕事ですね…テストエンジニアという職があるのもうなずけます。

 

チャットアプリの機能追加

非同期化

jQueryを使ったメッセージ送信のAjax化とインクリメンタルサーチを実装しました。

どちらも基本的にはclickやkeyupなどで発火したら入力データをバックエンド側に渡して、バックエンドからJSON形式でデータをもらって表示させるという流れです。

こういう書き方をしたら非同期になるのはわかったけど、本質的になぜ非同期になるのかは正直あまり理解できてないです。要勉強ですね。

 

あとわからないのはRailsでパーシャルをrenderすれば部分更新になると思うんですけど、これって非同期って呼ぶんですかね?あとReact routerも同じような感じで部分更新すると思うんですけど、これも非同期なのかな?

非同期と部分更新がどういう関係なのか把握せねば。

 

自動更新機能

これは別のブラウザーを開いていても同じチャットルームにいれば自動的に更新されて、他の人が送ったチャットが勝手に受け取れる機能です。

 

最初聞いた時はどんなロジックで実装するのかわからなくて、多分人知を越えたすごい実装方法なんだろうな…と思ってたらsetIntervalで一定間隔で関数実行していくだけでした。これがスタンダードなんだろうか…?LINEとかも同じロジックで更新させてるのかな?

 

とか言いつつ実装はかなり手こずりました。turbolinksがくせ者すぎる…こいつのせいで半日無駄にした。これが作動してると最初の訪問でjQueryが効いてくれないことがあるみたいなんですよね。リロードしたら効くんだけど。確か$(document).ready()で全体囲めば解決できた…気がする。

 

サーバーの基本知識

IPアドレスSSHLinuxコマンドに関する基本的なところを学びました。

 

ここに関しては多少本で勉強してたので、スムーズに理解できました。でもエンジニアです!って胸はって言えるほどには理解できてないかな…。「ポートとソケットがわかればインターネットがわかる」って本を読んだんだけど、途中から結構苦しかったのでもう一回読み直そうと思う。

 

 

あと秘密鍵と公開鍵のセキュリティシステムについても少し記述があったけど、これもたまたま前に本で読んでた内容だった。なるべく読書する習慣つけててよかった…。

 

暗号解読〈上〉 (新潮文庫)

暗号解読〈上〉 (新潮文庫)

 

 

これ確かホリエモンがオススメしてたんですよねー。単純に読み物として面白いのでオススメです。

 

AWS

完全に初めて触りました!今まで作ったものをデプロイすることはHeroku以外にはなかったので、なかなかチャレンジングな内容でした。と言うかほぼブラックボックスです。デプロイはできたけど何も見ずにもう一回同じことはできないだろうな…。

 

アカウント作成から、EC2インスタンス作成、Linuxサーバー構築、MySQLの設定、nginxとUnicornをインストールして、Capistranoでデプロイを自動化しました。

作ったチャットアプリにはcarrierwaveで画像アップロード機能をつけたので、この環境でも動くようにアップロードされた画像ファイルはS3に置くようにして連携させました。

 

なんか昔個人ホームページをロリポップにアップロードしたのを思い出した。何もわかってなかったから手探りでググりながらやったもんなー。DNSとか全く理解してなかったからお名前.comで買ったドメインに何も表示されなくて焦ったな。

久しぶりにロリポップの公式サイト見たら超オシャレになってて笑った。林家ペーパーぐらいピンクだったのに。

 

終わり

そんなこんなで自分で作ったチャットアプリのデプロイが終わり、基本的には個人作業はここで終わりです。これからはチームでWebサービスを作る期間に移ります。

 

ただ時間的にちょっと余裕があるので、個人的な開発もやっていこうと思ってます。せっかくいろいろ聞ける優しいメンターさんがいるので、チャレンジしていこうと思ってます。何作るかはまだ考え中…