Drupal開発環境構築 アプリCI/CD編
by
Takahiro Komatsu
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Drupal開発環境構築 アプリCI/CD編 2019.3.20 Drupal Meetup 豊⽥ #5 @豊⽥中央研究所 ことラボ 代表 ⼩松⾼廣
Slide 2
Slide 2 text
撮影・シェアOKです スライドは後ほど https://kotolab.jp にて掲載します
Slide 3
Slide 3 text
⾃⼰紹介 - ⼩松⾼廣(こまつたかひろ) - ことラボ 代表 - フリーランスエンジニア - 修⼠:公⽴はこだて未来⼤学⼤学院 システム情報科学研究科 複雑系情報科学領域
Slide 4
Slide 4 text
ࡳຈ വؗ
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
公⽴はこだて未来⼤学
Slide 7
Slide 7 text
就職@東京 ソフトウェア開発 →ハードウェア開発へ 無線機・マイコン機器の開発 安否確認システム ヘルパーコールなど福祉機器の開発
Slide 8
Slide 8 text
ことラボ
Slide 9
Slide 9 text
ひとにしかできないこと。 あなたを⽀える、ことづくり。
Slide 10
Slide 10 text
モノ視点 <=> コト視点
Slide 11
Slide 11 text
モノやサービスだけでなく ⼈の役に⽴つ仕組み = システム を作りたい
Slide 12
Slide 12 text
事業内容 - 電⼦機器開発 - アプリケーションソフトウェア開発 - ネットワークシステム構築 - ホームページ制作 - 名刺・パンフレット制作
Slide 13
Slide 13 text
楽しい開発案件 ぜひ紹介してください
Slide 14
Slide 14 text
難聴者の 補聴⽀援システム
Slide 15
Slide 15 text
⽇本でどれぐらいの⼈が難聴? 厚⽣労働省 “平成23年 ⽣活のしづらさに関する調査 (全国在宅障害児・者等実態調査)” 20dB 以下 25 〜 39dB 40 〜 69dB 70 〜 89dB 90dB 以上 WHO 障害者 ⼿帳 ⼈⼝⽐5% = 約635万⼈ 24ສਓ WHO “Deafness and hearing loss” 2015年 約611万⼈
Slide 16
Slide 16 text
ヒアリングループ ⾳声情報 (電気) マイク ループ線 ⾳声情報 (磁気) 聞く ループアンプ
Slide 17
Slide 17 text
ヒアリングループを 受信できる機器 補聴器 (Tモード付) 専⽤受信機 ⼈⼯内⽿ https://ja.wikipedia.org/wiki/⼈⼯内⽿
Slide 18
Slide 18 text
ヒアリングループのマーク
Slide 19
Slide 19 text
Facebookάϧʔϓʮו܊Ί͔ͩͷֶߍ ʯ https://www.facebook.com/groups/g.medaka/ - 難聴者が難聴者を⽀援 する団体 - 毎⽉第1⼟曜⽇に集 まってヒアリングルー プ・⾳声認識システム の研究をしている
Slide 20
Slide 20 text
難聴者⽀援を通して 社会の「聞こえ」に対する 考え⽅を変えていきたい
Slide 21
Slide 21 text
Drupal
Slide 22
Slide 22 text
Drupal(ドゥルーパル) - CMS(Contents Management System) WordPress, Joomula! に次ぐシェア - PHPで書かれている Symfony2フレームワークをベースにしている - 最新バージョン 8シリーズ 2019/3/19時点 8.6.12 - 個⼈的にはCMSとして⾒るよりもPHPアプリケーションフ レームワークとして⾒ることに意味があると感じている
Slide 23
Slide 23 text
世界のCMSシェア率 その他 12.2% Drupal 1.9% Joomla! 2.9% WordPress 33.4% 不明 44.6% 2019/3/19⽇現在 IUUQTXUFDITDPNUFDIOPMPHJFT IJTUPSZ@PWFSWJFXDPOUFOU@NBOBHFNFOUBMM
Slide 24
Slide 24 text
Webサイト・Webアプリ どうやって作っていますか?
Slide 25
Slide 25 text
サイト制作⽅法の変遷 - がんばって全てをタグ打ちする - パーツ(ヘッダ/フッタ)を共通化する - 動的にサイトを⽣成する - 共通化された機能(ログイン/管理画 ⾯)を誰でも楽に使えるように
Slide 26
Slide 26 text
MVCモデル Model View Controller ユーザ データ調整 リクエスト 要求伝達 データ要求 ページ提供 データ
Slide 27
Slide 27 text
お店でご飯を⾷べる 農家(DB) 給仕(HTTP) 料理⼈(APP) ユーザ 調理 オーダー 注⽂伝達 野菜要求 料理提供 野菜納⼊
Slide 28
Slide 28 text
MVCモデル MySQL Apache Drupal ブラウザ データ調整 リクエスト 要求伝達 データ要求 ページ提供 データ
Slide 29
Slide 29 text
なぜCMSを使うのか - 同じ作業を何度もしたくない どのページでも使うパーツの作成 誰でも使う機能の開発 - コピペして作った量だけ修正する量も増える - コンテンツを管理することよりも コンテンツを作ることに集中したい
Slide 30
Slide 30 text
サイト作りは 意外とやること多い
Slide 31
Slide 31 text
どんどん⾃動化しないと マンパワーでは解決が難しい
Slide 32
Slide 32 text
⼀番の問題は
Slide 33
Slide 33 text
あまりに作り込みをすると 改修するときの フットワークが重くなる
Slide 34
Slide 34 text
安全性が求められるものほど 部品を変更するのは⼤変
Slide 35
Slide 35 text
CI/CD
Slide 36
Slide 36 text
CI 継続的インテグレーション - Continuous Integration - 丁寧に時間をかけて作ったもの同⼠を組み合わせ て1つにして本当に⼤丈夫かどうか?を確かめる (テストをする)のはすごく⼤変 - たくさんの⼩さなパーツ(Webサイトの場合は外 観パーツ・機能パーツ)を常に新しく作ってどんど ん組み込んでいけるよう統合作業を⾃動化したい
Slide 37
Slide 37 text
CD 継続的デリバリー/デプロイ - Continuous Delivery - Continuous Deploy - ユーザへ常に新しいもの(=Webサイ トでの体験)をどうやって届ける か?を⾃動化したい
Slide 38
Slide 38 text
CI/CDのステージ ビルド 結合テスト コーディング デプロイ パッケージ ユニットテスト リリース CI CD
Slide 39
Slide 39 text
具体的には どうしたらいい?
Slide 40
Slide 40 text
CI/CDを実現するために - パーツ管理の仕組みを変えてみる 誰でも情報を辿って理解できるようにする - テストを⾃動化する ⼈はミスをする⽣き物 - アプリ/動作環境の可搬性を⾼める どこでも動くようにする
Slide 41
Slide 41 text
パーツ = コード = ファイル
Slide 42
Slide 42 text
ファイル名で管理するのは⼤変 - ⽇付をつける⼈もいる 20190320code.txt 20190327code.txt … - 末尾に数字を⼊れる⼈も code_1.txt code_2.txt … - いずれにしても「何がどうして変更されたか?」を 後から⾒た時や他の⼈には分からないという問題
Slide 43
Slide 43 text
コメントを書くことは もちろん⼤切
Slide 44
Slide 44 text
なぜそうしたのか? の履歴を辿れることが⼤切
Slide 45
Slide 45 text
バージョン管理システム を使おう!
Slide 46
Slide 46 text
git
Slide 47
Slide 47 text
使ってますか?
Slide 48
Slide 48 text
git(ギット) - Linuxカーネルのソースコード管理⽤に作られた OSSのバージョン管理システム - リモートリポジトリ+ローカルリポジトリを持てる ので分散開発がしやすい(できるだけ同期的に) - テキストデータであれば差分を簡単に取ることが できるので変遷を楽に確認できる (バイナリデータはブランチを適度に削除するなど うまく管理しないとデータ量が⼤変なことになる)
Slide 49
Slide 49 text
リモートリポジトリ ローカルリポジトリ 開発 プル プッシュ コミット PC サーバ
Slide 50
Slide 50 text
リモートリポジトリ
Slide 51
Slide 51 text
リポジトリ内の流れ =ブランチ戦略
Slide 52
Slide 52 text
master 機能1 1.0 バグ 機能2 1.1 2.0 3.0
Slide 53
Slide 53 text
バージョン管理システムの可能性 - コード以外にもバージョン管理したいものは 意外とたくさんある 回路図・3Dデータ・仕様書・契約書… - テキスト形式にして書けるものは何でもバー ジョン管理システムとすごく親和性が⾼い
Slide 54
Slide 54 text
GitHub - gitのリポジトリをホスティングするサービス - 現在はMicrosoftが運⽤している - 無料ユーザでも公開リポジトリは好きなだけ作成可能 - 2019年1⽉から無料ユーザでも⾮公開リポジトリを いくらでも作成可能になった (ただし無料ユーザの場合には共同編集者が3名まで 等のいろいろな制限がある)
Slide 55
Slide 55 text
GitLab - gitのリポジトリを管理するためのアプリケー ション - OSSのコミュニティ版はオンプレミスで運⽤可能 (スペックを要求するのでVPSにやや不向き) - GitHub同様にGUIを提供してくれるのでCUIが 苦⼿な⼈にも使いやすい
Slide 56
Slide 56 text
No content
Slide 57
Slide 57 text
GitLabのCI/CD機能(1) - GitLab Runner GitLabが管理するリモートリポジトリに対する操作を トリガーとして、あらかじめ設定したコードを⾃動的に 実⾏できる - Runnerを使うと プッシュ/マージ + ビルド + ユニットテスト まで⾃動化可能 - GitHub + CIツール(Jenkins/Travis CI/ Circle CI)でも同様のことは可能
Slide 58
Slide 58 text
CI/CDのステージ ビルド 結合テスト プッシュ/マージ デプロイ パッケージ ユニットテスト リリース CD React Sass ↓ .js .css CI
Slide 59
Slide 59 text
GitLabのCI/CD機能(2) - GitLab CI/CD Pipeline - ステージ間を逐次処理 - ステージ内を並列処理
Slide 60
Slide 60 text
CI/CDのステージ ビルド 結合テスト プッシュ/マージ デプロイ パッケージ ユニットテスト リリース CD CI
Slide 61
Slide 61 text
CI/CDツールのメリット - シェルスクリプトをがんばって書けば同じこと はもちろんできる - シェルスクリプトの汎⽤性は⾼いが属⼈的コー ドになりやすく可読性を維持するのが難しい - なにより「冪等性」を保証するのがすごく⼤変
Slide 62
Slide 62 text
冪等性(べきとうせい) - 同じ処理をもう1度適⽤しても⼤丈夫である こと - 既にその処理がされているかどうかをチェッ クしながら実⾏するコードを書くのは⼤変労 ⼒がかかる
Slide 63
Slide 63 text
⾃動化に求められる要件 - ユーザはどうやってそれが実現されているの かを気にしなくていい - あるべき状態を「⼿続的」ではなく 「宣⾔的」に書くと再現性が⾼い cf.料理のレシピ・関数型プログラミング
Slide 64
Slide 64 text
カプセル化 - 「どうやって実現されているか」をユーザが知 らないと使えない状況は情報がうまくカプセル 化されていない - エンジンやトランスミッションの構造を知らな くても⾃動⾞は運転できる - コンパイラや半導体の原理を知らなくてもコン ピュータは使える
Slide 65
Slide 65 text
ご飯が1つある状態にしてください ご飯を1つ追加してください ≠ 宣⾔的な注⽂ ⼿続的な注⽂
Slide 66
Slide 66 text
ご飯を1つ追加してください システム ユーザ 注⽂が通っているかどうか常に確認が必要!
Slide 67
Slide 67 text
⼿続的な記述は 履歴がないと 次の状態がどうなるか分からない
Slide 68
Slide 68 text
ご飯が1つある状態にしてください システム ユーザ どれだけ注⽂しても⼤丈夫
Slide 69
Slide 69 text
CI/CDのポイント
Slide 70
Slide 70 text
宣⾔的に記述 かつ 容易に持ち運び可能 にすること
Slide 71
Slide 71 text
そのためにツールを 使って⾃動化する
Slide 72
Slide 72 text
Docker
Slide 73
Slide 73 text
- OSのカーネル空間を共有しつつユーザ空間 を仮想的に分離して提供するOSS - アプリケーションのコードだけではなく 動作環境も含めてまるごとパッケージしたも の(Dockerイメージ)を持ち運びできる - Dockerfileをgitで管理すると Dockerイメージの作り込みを防げる
Slide 74
Slide 74 text
開発⽤PC環境と サーバ環境の 差異も吸収できる
Slide 75
Slide 75 text
開発環境の差異 開発⽤PC サーバ ハードウェア macOS Apache Drupal MySQL ハードウェア CentOS Apache Drupal MySQL 開発したコードが 本当に本番サーバで動く?
Slide 76
Slide 76 text
コンテナ化 開発⽤PC サーバ ハードウェア macOS Apache Drupal MySQL ハードウェア CentOS Apache Drupal MySQL 開発コード+ミドルウェア を パッケージング(コンテナ化)して持ち運ぶ
Slide 77
Slide 77 text
でも同じサーバ環境を 何個も作るのは ちょっとしんどい…
Slide 78
Slide 78 text
アプリCI/CD インフラCI/CD
Slide 79
Slide 79 text
というわけで 次回はインフラCI/CD
Slide 80
Slide 80 text
⼤事なのは
Slide 81
Slide 81 text
ツールを使うことが⽬的ではなく 開発効率を上げることが⽬的
Slide 82
Slide 82 text
⾃分の状況に合わせて 少しずつ取り⼊れながら より良い開発環境構築へ!
Slide 83
Slide 83 text
ご清聴ありがとう ございました
Slide 84
Slide 84 text
https://kotolab.jp ことラボ