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 ことラボ