CODEBASE School 8week(3月5日週)

これまで学んだ知識をもとに、Slimを使って、掲示板アプリとTwitter風アプリを作る。これが終わったら卒業制作。基本的に各自のペースで製作を進めて、わかんないとこを随時相談するってスタイル。

CODEBASE School 8week

  • 掲示板アプリ製作/Twitter風アプリ製作/卒業制作

掲示板アプリ製作/Twitter風アプリ製作/卒業制作

  • Slimを理解するために以下のnunulkさんのチュートリアルがめちゃめちゃ勉強になった。このチュートリアルでは、チケット管理アプリを作っているけど、一通りこのチュートリアルをやってみたあと、チケットアプリを直して掲示板アプリ、Twitter風アプリに変えてみる。

qiita.com

qiita.com

qiita.com

qiita.com

qiita.com

  • ログイン機能については、ISUCON5 のPHP実装とPHP本のセッションの章を読んで実装

github.com

  • パスワードをハッシュ化してDBに保存する方法は、セバさんに教えてもらった。以下の関数を使えばOK

    • password_hash — パスワードハッシュを作る
    • password_verify — パスワードがハッシュにマッチするかどうかを調べる

PHP: password_hash - Manual

PHP: password_verify - Manual

まとめ

実際にアプリケーションを書き始めたところから、楽しくなってきた反面、難しいと思うところもめちゃめちゃ増えた。どれだけコードを書く時間を確保できるかどうかがポイントだな。PHPのマニュアルとvar_dump()をめちゃめちゃ見たし、めちゃめちゃ使うー

CODEBASE School 7week(2月26日週)

この週は、DB、テーブル設計・ER図、アプリケーション設計について講義。Twitterとか食べログとコンビニのレシートなど実際に身の回りにあるものを例にとって学ぶスタイル。凄くわかりやすかったです。(SQLの基本的な書き方とかPHPでのPDOの使い方はProgateとPHP本読んで各自頑張りましょうスタイル)

CODEBASE School 7week

  • テーブル設計・ER図
  • アプリケーション設計
  • 身近なサービスを例に設計を考える

テーブル設計・ER図

講義ででてきた単語メモ。(あんまり体系的に整理できてないけど、、)

  • 一つのオブジェクト = 一つのテーブル
  • 人とか物を一つのエンティティっていう。
  • ユースケース
    • エンティティがどんな感じで使うのか、使われるのかユースケースを考えた図
  • アクティビティー図
  • 状態遷移図
    • ECサイトを作るとして、買う、お金入金する、配送する、キャンセルする、などの流れ。
  • クラス図。ログインfunctionとか、ログアウトfunctionとか、を図にする
  • シーケンス図。とかもよく使う
  • UML
  • DBって多対多っていう関係性を持つことができないので、間に別の関係性(リレーション)を入れることで多対多を解決できる。多対多のリレーションが発生する場合は、間にその関係性がわかるテーブルを入れなきゃいけない。
  • データベースを作るときは、まずER図をかく。そしてデータベースで表現する
  • many to many
  • モデルとオブジェクトとエンティティって似たようなワードが出てきたけど、意味同じ?
    • 意味ほぼ同じ。世界観が違う
      • モデルは、MVCモデルで話してるときの呼び名
      • オブジェクトは、オブジェクト志向についての話をしている場合の呼び名
      • エンティティはER図を書いているときの呼び名

アプリケーション設計

Webアプリケーションの設計プロセス(講義資料がわかりやすかったので引用。備忘)

  • 要件定義

    • どんなシステム作りたいか
    • どんな価値を利用者に提供したいか
    • 何を解決したいか
  • 基本設計

    • ハードウェア、データベース、ソフトウェアの選定

      • クラウドサービス使うか?(AWS, GCP, Azure)
      • データベース何にするか?
      • アプリケーション、なんの言語で書くか?
    • データベース設計、テーブル設計

      • ER図
      • テーブルのカラム設計
    • システムの機能概要の設計

    • 外部システムとの連携方法の検討

      • 自分たちのサービスのコアビジネス、コアロジックはどこか
      • 外部サービスを利用して実装出来ないのか
  • 詳細設計

    • 画面のレイアウト及び機能設計
      • UIデザイン
      • 画面遷移
      • URL設計
  • コーディング

    • コーディング
    • テスト

身近なサービスを例に設計を考える

アプリケーションを作るときの流れの話。twitterっぽいアプリを作ることを例に。

  • ER図(基本設計)

f:id:shimabukuromeg:20180316142703j:plain

f:id:shimabukuromeg:20180316142233j:plain

  • 新規登録できること
    • Post /register
  • ユーザーはログインできること
    • Poost /login
  • ユーザーはツイートできる
    • ログインしてるユーザーの情報をみて色々取ってくる
    • Post /tweet
  • ユーザーは全体のツイート一覧を見ることができる
    • Get /
  • ユーザーは任意のツイートにLikeできる
    • Post /tweat/{twiteid}/like
  • ユーザーは任意のユーザーをフォローできる
    • Post /follw/{userid}
  • 個別のツイートページ
    • GET /tweet/tweetid
  • ユーザーページ

    • フォロー・フォローワーの情報
    • GET /user/userid
  • アプリケーション作成の流れ

    • 基本設計(基本的な機能など)
    • 画面レイアウトを考える
    • URLを設計する
    • ER図を考える(DBの設計)

まとめ

この回の講義はめちゃめちゃ内容濃かった。0からアプリケーションを作るまでの流れはとても勉強になった。これから自分でアプリケーションを書くときに、またこの講義のことを振り返るようにする。

その他

PHPでのPDOの使い方はPHP本などの自己学習だった。その際、以下ページがわかりやすかったのでメモ

qiita.com

qiita.com

CODEBASE School 6week(2月19日週)

この週から軽量フレームワークSlimを使ってWebアプリケーションを作る。まず、MVCフレームワークの概念、Slimについての講義があって、Slimのチュートリアルを手を動かしながら進めていく感じ。

CODEBASE School 6week

フレームワークとは

例えば以下のような機能を提供する

  • ルーティング
  • プロジェクトひな形作成
  • セキュリティ
  • テンプレートエンジン
  • ログ出力
  • 認証

MVCについて

MVCとは?についてさぼさんのたとえが凄くわかりやすかったので以下そのまま引用

MVCオブジェクト指向が出来た成り立ちと同じく、こうやって役割分担すると人間が理解しやすいよねで出来てるプログラミングの設計の概念ですねー

飲食店一人で経営してたけどそろそろ人雇おうかーってことで、ウェイターと料理人一人ずつ雇おうみたいな、人に役割を与えて決まった事をやってもらうのとにてて

ModelとViewとControllerにそれぞれ役割を与えて実装する、すると1つずつのクラスの役割が明確なので実装しやすいのと、MVCを知ってる人同士で開発するときに同じフレームワークで開発できるので議論しやすい

更にSlimのトップページにあるHello,World的なコードはMVCなのか??ってい疑問があったので、この場合は飲食店一人で経営になります???って聞いてみた

slimに乗っかればとりあえずMVCの土台の上には居る感じ。ModelとViewまだ出てきてないですけど app.phpがControllerの役割します MVC、基本的にあと1人Routerが居て MVC(R) なんですけど app.phpはRouter, Controllerの役割します Router... 来たリクエストのURLと対応するControllerを決める Controller...受け取ったリクエストの窓口、処理と、ModelとVIewの呼び出しを担当 Model... データ層とのやり取りを担当。PDO, ORM, DataMapper 等(複数デザインパターンあり) View... HTMLやJSONの表現を担当。生php、twig, blade等 役割分担考えたけどまだ人雇ってない感じ?

www.slimframework.com

MVCについては、Railsの教科書にわかりやすく説明されてる

一番小さなRailsアプリづくり

composerについて

  • プロジェクトが必要とするライブラリやパッケージを管理。 各ライブラリのインストールやバージョン管理や依存関係の管理
  • インストール(Mac
$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer

Slim tutorial

  • Slim 環境準備(MAMP
$ composer create-project slim/slim-skeleton [my-app-name]
  • Routingを覚える
  • GETでクライアントがサーバーに渡せる情報はURLとqueryだけ
  • POST Requestを扱う
  • 画像アップロード
  • Sessionを扱う
  • Twigでテンプレートを効率的に書く

以下来週

  • DBアクセス
  • RequsestとResponseのHeaderを確認してみる 第14回
  • セキュリティ
  • 掲示板を作る 課題形式
  • blogを作る 課題形式

まとめ

なんとなく動くものが簡単に準備できたのでおお!ってなった。来週からはDBも使うのでPHP本をちゃんと予習せなば!!!

CODEBASE School 5week(2月12日週)

今週からサーバーサイドのPHPのお勉強。PHPの基本的な構文などの話はProgateでやってる前提で、開発を進めていくにあたっての環境構築、ツールの使い方、PHPの歴史の話などをメインに講義。

CODEBASE School 5week

  • MAMP インストール
  • Webおさらい
  • PhpStorm使い方
  • PHPについて
    • 2000年代に流行っていて、PHPを使えるユーザー数は多い
    • PHP7になって、これまでたくさんあった罠がなくなり、今風の言語になってる。Laravelとかフレームワークとして、すごくよくできているらしく、PHPは今後の注目度高い。
    • 公式ドキュメント。PHPは公式ドキュメントがしっかりしているので、ドキュメントさえ読めればPHPかける。とのこと。

PHP: PHP マニュアル - Manual

PhpStormの使い方

PhpStormは色々多機能でシステムキッチンだけど、最初から使いこなすのは難しいので、まずは以下3つを使えるようにする。

  • デフニションジャンプ(定義に飛ぶ)

    • コマンド + B
    • コード読んでてよくわからんってなったら、そのメソッドとかオブジェクトとの定義元に飛んで調べたりするのはよくあるで頻繁に使う
  • コマンドパレット

    • メニューバーとかから探すのがめんどくさい時に使える。
  • コード整形

オブジェクト指向について

  • クラスの設計とDBの設計の関係性がいまいちよくわからなかった。Progateで食べログ的な口コミ情報を表示するページを作成するっていうPHPのコースがあるんだけど、その際にFoodクラスとかMenuクラスとかを色々作る。作りたいサイトがあって、そのサイトに必要なクラスってどうやって考えるものなのかっていうのが謎だった。ポイントとしては、実際に作ってみて手を動かして慣れる、DBの本読むなどのアドバイスをもらったので、もう少し調べていこうと思う。おすすめ本 ->達人に学ぶDB設計 徹底指南書

PHPでWebアプリケーションを学習する TODO

PHPで初学者がWebアプリケーションを学ぶ時の流れは以下のような流れがおすすめで、まずは軽量のフレームワークであるSlimを触ってみて、Webアプリケーションで何ができるのか、HTTPで何ができるのかのを学ぶことが重要。(マイクロフレームワークは最低限のHTTPの実装をしているプログラムなので、マイクロフレームワークを使うことでHTTPが何なのかを知ることができる)Slimのドキュメントを見てよくわかないワードがあったら、MDNのHTTPの章を読むなど。あとはisuconの出題問題もPHPはSlimで書かれているので、読んでみると良いかも。

  • Progate 2週
  • PHP本 2週
  • slim アプリ自作
  • Laravel アプリ自作

developer.mozilla.org

www.slimframework.com

github.com

まとめ

マニュアルを読みながら、定義元に飛ぶを繰り返していくのが、コードを理解できるようになるので成長しやすいとのこと。(PhpStormめっちゃ便利!!!)エディタはすごく重要で、プログラミングする際の生産性がものすごく変わるので、初心者ほどちゃんと環境を整えたほうがよい。来週からは軽量フレームワークSlimを使ってWebアプリケーションをかく。

感想

今日はものすごくインプット多くて消化できていないことも多いけど、しっかり復習しよ。やっぱり手を動かさないと理解できないことは多いよなーと思いました。

CODEBASE School 4week(2月5日週)

今週は JavaScript について。JavaScript 基本的な構文、フレームワーク、歴史、昨今のJavaScriptを取り巻く環境についての講義があって、そのあとjQueryの雛形を参考に手を動かしながらサイトに動きをつけて学習した。

CODEBASE School 4week

  • JavaScriptとは
    • JavaScript のメジャーなライブリやよく参照されるドキュメントについての記事。

qiita.com

qiita.com

  • JSの書き方
  • jQueryの書き方
  • SPAとは
    • SPAでは、ページ全体をレンダリングする代わりに、変更する部分だけ書き換えます。それによってサーバー内でのデータ結合における負 荷軽減、クライアントへの通信量削減、ブラウザでのレンダリングの 負荷軽減が実現し、相当のスピードアップが可能になるのです
    • SPAいまいちよくわからなかった。

qiita.com

qiita.com

  • Webpactとは

qiita.com

qiita.com

  • JSのデバック方法

JavaScriptが出来ること

  • フロントエンド、PC web, mobile web
  • サーバーサイド Node.js
  • デスクトップアプリ(Windows, macOS, Ubuntu) Electron
  • ネイティブアプリ(iOS, Android) ReactNative, Ionic, Weex

SPAフレームワーク勉強

今回の講義では細かく触れなかったけど、SPAフレームワークが気になった。オススメの勉強方法が共有されてたので備忘メモ。

  • プロゲートやドットインストールでJavaScriptの文法などを理解する
  • JavaScriptの概念を理解する →開眼JavaScriptという本がオススメです。 https://www.amazon.co.jp/s/?ie=UTF8&keywords=%E9%96%8B%E7%9C%BC+javascript

  • SPAやAjax通信の仕組みを理解する →主に下記の単語はSPAで開発するにあたって、事前に調べて意味を理解しておくと良いと思います。 ・npm ・node.js ・gulp ・webpack ・コンポーネント志向 ・SPA(シングルページアプリケーション) ・Ajax通信 など

  • Vue.jsのチュートリアルをやる →いきなり、Railsと合わせて開発し始めると、そもそも、Vue.jsで何をやっているのかわからなくなるので、まずは、Vue.jsだけで簡単なものを作る事をオススメします。

  • Vue.js + Rails(Laravelなどでも可能)でSPAのアプリを作成する

kakakakakku.hatenablog.com

qiita.com

まとめ

フロントエンドの技術は進化のスピード早い、あと色々と登場人物(BowerとかGulpとかWebpackとか)が多くて、それらがどいう役割を持っていて、どんな感じで使うのかなど、いまいち理解できなかった。使うレベルに達していないから、説明してる記事を読んでもピンと来ないのかもしれないけど、理解できるようしたい。今週でフロントエンドのお勉強は終わりで来週からはサーバーサイドのお勉強。

CODEBASE School 3week(1月29日週)

今週は先週学んだ HTMLとCSSとBootstrapを使ってオリジナルサイト制作をした。

CODEBASE School 3week

  • オリジナルサイト制作
  • gulpでコーディングを効率化
    • これはめっちゃ便利だった。

gulp · GitHub

qiita.com

qiita.com

ワイヤーフレーム作成

サイトを作るときにはまずはワイヤーフレームを書いて、どんな感じのものを作るか考えるのが大事。ふわっとしたまま進めると、何作ろうとしてたんだけ???みたいな感じになるので要注意。ワイヤーフレームを書いたりするのにオススメのサービス->Prott

prottapp.com

オリジナルサイトを公開してみた

今回の講義で作ったサイトは、家族に作って欲しいと言われたのがきっかけだったというのもあって、世の中に公開してみた。個人でドメインとって、公開するのは初めてだったのでよい経験。

母乳育児相談室 春

qiita.com

qiita.com

1000時間積む話

講義の中で、プログラミングを習得するのに必要な時間についての話があった。だいたい1000時間。プログラミングはセンスとか才能とか全然不要で、本当に取り組んだ時間に比例して上達するので、自分がプログラミングに対して1000時間投資するためにどうやって時間を抽出して、計画するかを考えるのが重要とのこと。例えば、月に100時間プログラミングの勉強したとすると習得するのに10ヶ月かかるし、月に50時間だと20ヶ月かかる。計画して時間を積んでいくのが重要。ただ、時間ベースだとどれぐらいのスキルがあるかどうか不明なので、目安としては、400〜500時間で、世の中に自作のWebアプリケーションを公開できる技術を持っているのが目標設定として良くて、このWebアプリケーションを世の中に公開できるっていうのは、

  • 最低限のHTML, CSS, JSを理解している
  • Webの最低限の仕組みを理解している
  • DBの最低限の仕組みを理解している
  • サーバー、ドメインなどの知識を最低限理解している

が担保されるので評価される感じとのこと。今までコードを書くことにすごく苦手意識があったので、めちゃめちゃ励みになる。

まとめ

簡単なサイトだけど自分で作って誰かが喜んでくれる体験は嬉しいなあと思った。もっとできる範囲を広げていきたい。あとは1000時間を積むためちゃんと計画するっていうのはかなり重要だな思った。

CODEBASE School 2week(1月22日週)

今週はHTMLとCSS をメインに簡単な講義があり、手を動かして学習しました

CODEBASE School 2week

  • HTMLとは
    • HTML要素リファレンス

developer.mozilla.org

  • CSSとは
  • HTML・CSSの書き方
  • 開発ツールの使い方

www.buildinsider.net

  • Bootstrapとは
  • Bootstrapの書き方
    • paddingとmargin の違いがいまいちよくわからなくなったりした。「Bootstrapのサンプルがシンプルな構成でわかりやすいCSSになってるので、これらのページの要素をブラウザの要素を検証のツールで見て行くと雰囲気掴める」などアドバイスもらったのでやってみたり。

getbootstrap.com

coliss.com

まとめ

HTMLやCSSについて、HTMLはページの構造や文書の内容を記述していて、それに色つけるのがCSSっていうざっくりした理解だったので、手を動かしながら学ぶことで理解を深めることができた。特にCSSは、要素間の間隔だったり、想定していないところに影響があったり、想定した通り反映されなかったりで苦戦したが、そのぶん学びは多かったと思う。来週は、今週学んだ HTMLとCSSとBootstapを使って、オリジナルサイト制作