Chat-spaceの実装が一段落し、次はそのデプロイに向けて学習を行いました。そして課題は完了。いよいよ自分だけの力でアプリケーションを作る時がきました。
【学習内容】
・サーバーの基礎知識
・AWS
・個人アプリ制作
実は私、前職は工場で働いていました。実際に製品を作るラインに約12年、管理者になって約1年、そして別の工場に出向になってそこで管理職として3年。出向先の工場では主に課長職とTCD(Total cost down)担当、QCC(Quality control circle)教育担当に従事し、原価低減活動、品質向上活動の取りまとめや社員教育を行なってきました。
よく「生産性」という言葉を耳にしますが、工場なんかではかなりシビアに数値でのやり取りが行われます。作業における社員の歩く秒数さえもストップウォッチで計測し、その時間を1秒でも縮めようと努力します。そしてその積み重ねが例えば残業時間30時間/月が0時間/月になったりと、会社にとって大きな利益へと繋がっていきます。それは”急いで作業をやれ”ではなく仕組みや手順の観点から改善を行います。
なので、「生産性」という言葉を聞いたときはいろんな数字が頭を駆け巡り、アイデアを探しワクワクしてきます(笑)そのワクワク感を形にしてくれるプログラミングに出会った出向先の会社には今でも感謝しています。
・サーバーの基礎知識
まず、サーバーの必要性、役割を学びます。その上でIPアドレス、WANとLAN、ドメインとDNS、ポート、WEBサーバー、HTTPの基礎を学習します。
次にサーバ向けによく利用されているOSであるLinuxについて学びます。Linuxの特徴としては、以下の点が挙げられます。
①オープンソースであり、誰でも自由に無償で利用できる
②品質の高い多くのソフトウェアが利用できる
③世界中でサーバ用途として広く利用されているため信頼性が高い
④操作を自動化するための仕組みが用意されており、サーバの運用が行いやすい
そして次にSSHについて学習。SSHとは、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコルのことです。利用するメリットとしては以下の点が挙げられます。
①通信を盗聴される危険性を回避して、安全に操作ができる
②サーバ上でのファイル操作、設定ファイルの編集ができる
③データのバックアップをしたいとき、サーバ上で圧縮(ZIP)して、ファイルの一括ダウンロードできるので、アップロード・ダウンロードの大量ファイルの時間短縮ができる
実際の作業はこの後のAWSのカリキュラムで実施しました。
・AWS
いよいよChat-spaceのデプロイ作業です。以下の順序で進めます。
①クラウドについての基礎知識を学習
②AWSのアカウント作成
③EC2インスタンスの生成
④Linuxサーバ構築
⑤MySQLの設定
⑥Railsを起動
⑦Nginx経由でRailsにアクセス
⑧Capistranoによるデプロイ作業の自動化
⑨C3導入
まず、なぜWebアプリケーションを利用できるのか、という事とデプロイするまでの流れ、クラウドを利用するメリットを理解します。そしてAWSのアカウントを作成し、そのサーバのひとつであるEC2インスタンスの生成し、環境構築の為の様々なツールをインストールしました。次にMySQLの設定と動作確認。そしてついにデプロイ作業を行い全世界に公開!
この間、記述ミス等で躓く事もありましたがなんとか完了しました。しかしまだ終わりではありません。WebサーバであるNginxを導入します。NginxとはWebサーバの一種で、ユーザーのリクエストに対して静的コンテンツの取り出し処理を行い、そして動的コンテンツの生成をアプリケーションサーバに依頼するためのものになります。エンジンエックスと読みます。
そして、ここまでは手動で行なってきたデプロイ作業をCapistranというツールを使用し自動で行えるようにします。これでデプロイ時のコマンド操作がかなり楽になりました。
最後に、AWSのS3というストレージサービスを導入します。Chat-spaceで投稿された画像についてはそこに保存されるように設定します。
実際に本番環境で機能を確認。そしてメンターへGithubのissueを用いて確認してもらい、無事LGTMをもらいました。いやー、嬉しかったですね。
・個人アプリ制作
さて、ここからは今まで得た知識を活用し、さらにそれを発展させて個人アプリを作っていきます。
工程の大枠としては、
①構想・計画立案
②設計
③開発
④テスト
⑤デプロイ
とし、5月19日の発表会までに③を完了させ、披露できるようにしようかと考えています。
今週で①、②は完了しました。①でまず構想を立て、必要なタスクを洗い出しひとつひとつに納期を設定していきました。タスク管理はTrelloを使用しています。
そして、②の設計です。各ページのデザイン設計とデータベース設計を実施。設計といってもノートに手書きですが‥。データベースはテーブル同士のリレーションに注意しながら作成。現在は③の開発へと駒を進めています。
合計でビューが6つ必要なので、苦手なフロントがスピーディにできるかどうかですね。ちなみにhamlを導入しています。
個人アプリの中身としては幼稚園の出欠簿アプリです。保護者の欠席の連絡、教諭の出欠簿としての役割を担うアプリケーションを作成していきます。妹が幼稚園の先生をしているのですが、聞いたら電話連絡&紙の出欠簿に手書きでやっているそうです(まあまあ良い私立の幼稚園なのに‥。幼稚園によってはメールやアプリ管理をしているところもあるようです)。
こういうアプリを活用しムダ・ムラを無くすことが「生産性を上げる」ことだと思います。気合で仕事をこなすことじゃないです(笑)