[go: up one dir, main page]

SlideShare a Scribd company logo
GRIMOIRE du IT
Eloim, Essaim, frugativi et appellavi
First Edition - 07/12/2017
written by anh kura (LFTV)
エロイム, エッサイム, 我は求め訴えたり
IT 魔導の書
Summary & Index
IT 業界では⽇々数多くの呪⽂が唱えられ
ている。多くはオリジナルの英語がその
まま使われる。これは⽇本においても同
様であるが、⽇本では正しく発⾳され
ず、カタカナ英語となっており、オリジ
ナルとはかけ離れた呪⽂になっているこ
とが多い。
本書は、⽇系 IT 企業においてコミュニ
ケーターを⽬指す⼈向けに、必要最低限
となる⽇本語の呪⽂を浅く解説した⼊⾨
書である。
内容に関して多少偏りがあることは認識
いる。
Index
- Internet

(インターネット)
- Development Process

(開発⼯程)
- Inside of Server

(サーバーの中⾝)
- Implementation

(実装)
- Test

(テスト)
- Server & Security

(サーバーとセキュリティ)
Internet
(インターネット)
How Internet works?
Device(デバイス):
- PC(ピーシー)
- Smart Phone(スマホ)
- Tablet(タブレット)
Browser(ブラウザー):
- IE(アイイー)
- Chrome(クローム)
- Firefox(ファイヤー・フォックス)
Access(アクセス)
Response(レスポンス・応答)
User/Consumer

(ユーザー/コンシューマー)
Service
(サービス)
SNS(エスエヌエス)
Blog(ブログ)
Search Engine(検索エンジン)
- Google(グーグル)

- Yahoo!(ヤフー)
→ ググる(Search by google)
Chat tool(チャットツール)
- ChatWork(チャットワーク)

- Slack(スラック)
etc.
How Internet works?(DNS)
User/Consumer

(ユーザー/コンシューマー)
Name Server
(ネーム・サーバー)
Server
(サーバー)
www.homes.co.jp
lifull-tech.vn
www.homes.co.jp
= 123.223.111.xxxlifull-tech.vn
= xxx.xxx.xxx.xxx
lifull-tech.vn server
xxx.xxx.xxx.xxx
HOME’S server
xxx.xxx.xxx.xxx
Domain(ドメイン)
URL(ユーアールエル)
URL(ユーアールアイ)
IP Address(アイピーアドレス)
Global IP(グローバルアイピー)
インターネットの住所は数字の羅列。
⾜らなくなって困ってる。
DNS(ディーエヌエス)?
Domain Name System(ドメイン・ネーム・システム)
Address book of Internet. インターネットのアドレス帳のこと
How Internet works?(hosts)
Name Server
(ネーム・サーバー)
anhkura.vn
No. Idk
xxx.xxx.xxx.xxxHosts file
(ホスツ)
Okay. Got it!
Hosts(ホスツ)ファイルとは、アドレス帳のことで、IP アドレ
スと呼び⽅を登録しておくと、設定した呼び⽅で、サーバーを
呼び出すことができるようになる。個⼈の PC かサーバー上で
設定する。
例えば、個⼈の開発環境は社内だけで分かれば良いので、
Global な Name Server に登録する必要はなく(しない⽅が
良く)、Hosts に設定するのが⼀般的である。
Mac(マック) や Ubuntu(ウブンチュ)などの Unix(ユニック
ス)/Linux(リナックス)系OSの場合は、/etc/hosts にあり、
Windows の場合は、バージョンによって異なるが Windows/
system32/drivers/etc/hosts などにある。
Hosts に記載がある場合は、Name Server より優先される。
Name(ネーム)がひけない
名前解決できない
などと⾔う
Development
Process
(開発⼯程)
Development Process
Marketing

(マーケティング/市場調査)
Planning

(プランニング/企画/

要件定義)
Sales/Consultant

(営業/コンサル)
Design

(デザイン)
Development

(開発)
Test

(テスト)
UAT: User Acceptant Test

(受け⼊れテスト)
Launch/Release/Deployment
(ローンチ/リリース/デプロイ)
Customer(お客様) Development Team(開発チーム)
Upstream Process
(上流工程)
UT: Unit Test(ユニットテスト)
Integration Test(結合テスト)
Performance Test(パフォーマンステスト)
Security Test(セキュリティテスト・脆弱性テスト)
Various kind of process
management
Flow type
Methodology

(メソドロジー/⼿法)
考え⽅
Water fall

(ウォーターフォール)
PMBOK(ピンボック)
プロセスごとに役割分担が決ま
っており、完了させたら、次へ
次へと渡していく。仕様書が完
璧な場合うまくいく。
Agile

(アジャイル)
Scrum(スクラム)
Lean(リーン)
XP: eXtrem Programming

(エックスピー),
Kanban(カンバン)
etc
細かくフィードバックを受けな
がら認識の齟齬がないように、
より意味のあるプロダクトが作
れるように進める。
⽇本は契約の⽂化である点と、
発注側の負担が⼤きいのであま
りやりたがらない。
Roles(ロール/役割)
PO: Product Owner

PM: Project Manager
(ピーオー/ピーエム)
プロジェクトの責任者。
お客様であることがほとんど。
お⾦を出す意思決定をできる⼈で
ない場合は、注意が必要。
Designer

(デザイナー)
デザインする⼈。⽇本では
html, css まで書く場合が多い
html, css だけ書く⼈は、Coder

(コーダー)と呼ばれることがある。
⽇本にだけある特殊な職種。
Developer

(デベロッパー)
Frontend Engineer

(フロントエンドエンジニア)
プログラムを書く⼈。
アプリケーションを作る。
Server side Engineer

(サーバーサイドエンジニア)
Infrastructure Engineer

(インフラエンジニア)
Network Engineer

(ネットワークエンジニア)
サーバの設定等をやる⼈。
ベトナムにはあんまりいない。
Tester

(テスター)
QA: Quality Assurance

(キューエー)
QC: Quality Control

(キューシー)
テストしたり、テストを設計したり、
プロダクトの品質を管理する⼈。
Scrum Master

(スクラムマスター)
Scrum(スクラム)でやる場合の

PM みたいな⼈。
PO/PM との違いは⼈事権以外の
意思決定権がないことなど。
Keywords of Scrum
Keyword
(キーワード)
Description

(意味)
Keyword
(キーワード)
Description

(意味)
practice
(プラクティス)
Scrum の中で⾏うイベント
Ticket

(チケット)
タスク管理ツールなどで管理されるタ
スク
planning
(プランニング)
計画
Kanban/Scrum Board

(カンバン/スクラムボード)
タスクを可視化する表
Sprint/Iteration
(スプリント/イテレーション)
開発期間全体を⼀定期間ごとに区切っ
て開発をする区切りのこと
Velocity

(ベロシティ)
チームの開発速度
Daily Scrum/Daily Stand up
(デイリースクラム/デイリースタンド
アップ)
朝会
Pair Programming

(ペアプロ)
スキルの共有等の⽬的で、

2⼈1組でプログラミングを⾏う。
Review

(レビュー)
プロダクトオーナーにデモを⾏い、フ
ィードバックを受ける
CI/CD: Continuous Integration/
Delivery

(シーアイ/シーディ)
継続してリリースするための仕組み化
のことを⾔うことが多い
Retrospective

(レトロスペクティブ)
プロセスの振り返り会。

改善案を話し合う
Product Backlog

(プロダクトバックログ)
要件リスト

プロダクトオーナーが管理
Priority

(プライオリティ/優先順位)
優先順位。必ず優先順位順に作る。
Inside of Server
(サーバーの中⾝)
Programming Language
(プログラミング⾔語)
Type 例
Compiler Language

(コンパイラ⾔語)
Java(ジャバ), C(シー), C++(シープラプラ), C#(シーシャープ) etc
Script Language
(スクリプト⾔語)
PHP(ピーエイチピー), Ruby(ルビー), JavaScript(ジャバスクリプト,ジャ
バスク), Python(パイソン) etc.
Functional Language
(関数型⾔語)
Haskel(ハスケル), Lisp(リスプ), Scala(スカラ), etc
Web Server
(ウェブサーバー)
Web サーバーには、httpd(エイチティティピーディー, エイチティティピーデーモン)
をインストール・設定する必要がある。


Apache(アパッチ), Nginx(エンジンエックス), Tomcat(トムキャット), Unicorn(ユ
ニコーン)など⾊々なものがある。
virtual hosts, vhosts(バーチャルホスト, ブイホスツ)を設定し、リクエストを受けた場
合に、何をどのように実⾏させるかなどを設定する。他にも⾊々設定する。
OS
(オーエス)
PC のローカルマシンの OS としてポピュラーなのは、Windows(ウィンドウズ),
Mac(マック), Ubuntu (ウブンチュ)あたりで、スマートフォンの場合は、Android(ア
ンドロイド), iOS (アイオーエス)など。
サーバー⽤としては、Unix(ユニックス), Linux(リナックス) 系の OS が多く、Linux
の Distribution として、AmazonLinux(アマゾンリナックス), CentOS(セントオーエ
ス), Redhat Linux(レッドハットリナックス) などなど⾊々なものがある。それぞれ違
いがあり、⽤途によって使い分けるが、まぁ AmazonLinux で良いかという⾵潮があ
ることは否めない。
サーバー⽤の OS には基本的に GUI (ジーユーアイ, Graphical User Interface) がな
く、デスクトップをマウスで操作するようなことはせず、コマンドを打って作業す
る。コマンドを打って作業する画⾯のことを、CUI(シーユーアイ, Character User
Interface)と呼んだり、CLI(シーエルアイ, Command Line Interface)コマンドを打
つ画⾯(アプリ)のことを Prompt(プロンプト)とか Terminal (ターミナル)などと呼ん
だりするが、⽬に優しく⿊背景に設定する⼈が多い。以前、営業の⼈に「⿊い画⾯を
開いている時は話しかけないようにしている」などと⾔われたことがあり、反省し
た。
Implementation
(実装)
Stage(ステージ)
User
Developer
Production Environment
(本番環境)
Develop Environment
(開発環境)
Local Machine
(ローカル)
Development(開発)
Deploy
(リリース)
Stage(ステージ)
開発の状態、進捗に応じて確認する環境を切り替える。最終的には本番環境へのリリースとなる。
上位サーバーへのリソースの配置を、Deploy(デプロイ) などと⾔う。
Live, Production(ライブ, プロダクション)環境。本番環境。
Pool(プール)環境。リリース直前の Production 環境と全く同じ構成の環境。
Staging(ステージング)環境とも⾔う。最終的なテストを⾏う
Backstage(バックステージ)環境。今回リリースする対象のファイル等のみがアッ
プされたテスト環境。ない場合もある。
Current(カレント)環境。各チームが開発中のものが集められたテスト環境。git を
使う場合、あまり必要がない。
Unit(ユニット)環境。個⼈の開発環境
ステージの例)
Version Control
(バージョン管理)
複数⼈のチームで開発する場合、誰がいつ何を変更したのかの履歴を管理する必要が
ある。リリースしたらバグがあったので、急遽前のバージョンに戻したいなどの状況
も考えられる。その際に利⽤するのがバージョン管理システムで、CSV(シーエスブ
イ), SVN(エスブイエヌ), Git(ギット)などがある。現在主流は、Git だが、SVN もま
だまだ残っている。
Git は⾃分でシステムを⽤意することも出来るが、便利なツールを統合したサービスを
利⽤するのが⼀般的で、代表的なものとして、github(ギットハブ), bitbucket(ビット
バケット), gitlab(ギットラブ・ギットラボ)などがある。
github のマスコットキャラクターは、Octocat(オクトキャット)と呼ばれており、可
愛い。
Version Control(バージョン管理)
git
remote
[app repository]
master branch
feature branch1
(remote)
feature branch2
feature branch1
(local)
feature branch1
commit
push
checkout
branch を切る
merge/ PR
アプリケーションごとに repository(リポジトリー)
を作成し、defalut になっている master ブランチや
develop ブランチなどから、開発⽤の branch(ブラ
ンチ)を作成(ブランチを切る)して、開発を⾏う。基
本的には、ローカル環境にcheckout(チェックアウ
ト)/clone(クローン) して、ローカルでの開発を進
め、commit(コミット) したり push(プッシュ) した
りする。サーバー上のものを remote(リモート)、⼿
元のものを Local(ローカル)と⾔う。
リリースする状態になった場合、master/develop
ブランチに merge(マージ) する。merge する際に
直接 merge する場合と、承認を経てから merge す
る Pull request(プルリクエスト・プルリク・RP )を
する場合がある。git を使った開発フローとして、
git-flow, github-flow などがあり、どのような⽅法
を取るかは、規模や状況によって変わってくる。
同じ箇所を修正してバッティングすることを、
Conflict (コンフリクト)と⾔う。コンフリクトした
ら泣きながら修正する。
Coding Standard
(コーディング規約)
複数⼈で開発をする場合、体裁が整っていないとソースコードは読みづらいので、書き⽅
を統⼀します。コーディングのガイドラインのことを Coding Standard(コーディング規
約)と呼び、⼀般的なものもあれば、独⾃で決めたものもあり、様々です。例えば PHP で
あれば、PSR-2(ピースエアールツー)などが有名です。
基本的に規約に則った書き⽅を⼼がけるべきですが、個⼈の⼼がけに依存すると定着しな
いことが多いため、システムで守らせるようにするのがスマートです。PHP であれば、
php-cs-fixer(ピーエイチピーシーエスフィクサー)、Ruby であれば rubocop(ルボコッ
プ・ロボコップ)などを利⽤するのが良いです。コーディング規約に限らず、ソースコー
ドをツールで解析することを、Static Code Analysis(静的コード解析)と呼びます。
コーディング規約の範疇なのか範疇外なのか微妙なところですが、コードを読みやすくす
るために⽇本で広く知られており、「これくらい⾔わなくてもやって当然」と思われてい
るのが、The Art of readable code(リーダブルコード)という書籍です。⼤事なことは、
どのようにコードを書くかについて共通認識を持つことです。それぞれが⾃⼰流にカスタ
マイズしては意味がありません。
Object-oriented
(オブジェクト指向)
Object-oriented Programming(オブジェクト指向, OOP)とは、オブジェクト同⼠の相互作⽤とし
て、システムの振る舞いを捉える考え⽅のことで、Encapsulation(カプセル化)、, Composition,
inherit and delegation(継承)、Polymorphism (ポリモーフィズム)といった特徴を持ちます。ナンノ
コッチャ!まぁ、みんなで開発する時に、便利な考え⽅だと思っておけば良いです。
オブジェクト指向のベスト・プラクティスをまとめたものをDesign Pattern(デザインパターン)と呼
び、様々なパターンがあります。実際にデザインパターンを意識してコーディングできる⼈は多くはな
いです。デザインパターンの中で最も有名なのが、MVC(エムブイシー) パターンです。Model(モデ
ル)-View(ビュー)-Controller(コントローラー)と⼤きく3つの役割に分けて実装する⽅法で、多くの
Framework (フレームワーク)に取り⼊れられています。
MVCフレームワークは、例えば…
- PHP: ZendFramework(ゼンド), CakePHP(ケイク), Symfony(シンフォニー), Laravel(ララベル)…

- Ruby: Ruby on Rails(RoR, レイルズ), Sinatra(シナトラ)
- Java: Struts(ストラッツ)
などなど。これらの View には、Template Engine(テンプレートエンジン)が採⽤されていることがほ
とんどで、有名なところでは、Smarty(スマーティ), Twig(ツイグ、トゥイグ), Blade(ブレード)など
があります。
近年の開発は、フレームワークを利⽤することが⼀般的であり、オブジェクト指向を理解したつもりに
なってしまう⼈が多く、経験を積んでもスキルが伸びない原因の1つになっています。
理由は様々ですが、複雑になりすぎたコードや汚いコードのことを Spaghetti Code(スパゲッティ
コード) と呼んだり、クソース, ウンコードなどと呼んだりします。
Test
(テスト)
Test(テスト)
Test には⾊々な種類がある。⼤雑把に⾔えば、Unit Test(単体テスト)→ Integration
Test(結合テスト)→System Test (システムテスト)→Acceptance Test(受け⼊れテスト)
の順番で⾏われる。
まずは、要求を分析し、どのような Test View Point(テスト観点)でテストすべきかを考
え、スケジュールに落とし込む Test Planning(テスト計画)を⾏う。Test View Point に
は、機能要件のテストだけでなく、⾮機能要件のテストもあり、例えば、Performance
Test(パフォーマンステスト), Security Test(セキュリティテスト/脆弱性テスト)などがあ
る。
要求に基づき、Test Spec/Test Case(テスト仕様書)を作成し、テストを実施する。
Test の中には、他の機能に影響が出ていないかを調べる Regression Test(リグレッション
テスト, 回帰テスト)や、ざっと確認する Smoke Test(スモークテスト), ⼀通り機能を使っ
てみる Walkthrough Test(ウォークスルーテスト), 特別情報を与えずユーザーとして使っ
てみる Monkey Test(モンキーテスト)など⾊々なものがあり、必要に応じて使い分ける。
ISTQB(アイエスティキュービー, International Software Testing Qualification Boards)
という団体があり、資格を発⾏している。テストにおいて国際的に通じる共通⾔語として
⼤変有益であり、LFTV においては、QA としての採⽤は ISTQB Foundation の資格を必
須とし、何となくテストしないようにしている。
Test(テスト)
Test 何? 誰がやる?
Unit Test
(ユニットテスト/単体テスト, UT)
関数やメソッド等の⼩さい単位での正しく動作するかのテス
ト。開発者がテストコードを書く。
網羅率のことを Coverage(カバレッジ)と⾔う。
Developer
Integration Test
(インテグレーションテスト/結合テスト)
開発した機能が全体として正しく動作するかを検証する。 QA
System Test

(システムテスト)
本番環境とほぼ同じ環境で、全体として正しく動作するかを
検証する。
QA
User Acceptance Test

(アクセプタンステスト/受け⼊れテスト, UAT)
発注者の本来の⽬的・意図通りに動作しているかを発注者が
検証する
Customer
Requirement Analysis
(要求分析)
Requirement Definition
(要件定義)
Basic Design
(基本設計)
Specific Design
(詳細設計)
Coding
(コーディング)
Code Review
(コードレビュー)
Unit Test
(単体テスト)
Integration Test
(結合テスト)
System Test
(システムテスト)
Acceptance Test
(受け⼊れテスト)
Automation Test
(⾃動テスト)
何度もやるテストは⾃動化すべきである。CI/CD の観点からも⾃動化を積極的に進めるべき。
Dev. Servers
Jenkins
Web Hook
Feed back
Clone
Push
Static Code Analysis
Unit Test
UI Test
Jenkins(ジェンキンス)が git のリポジトリ
のイベント(push など)を Webhook(ウェ
ブフック)などで監視し、静的コード解析や
UT, Selenium (セレニウム)による UI の⾃
動テスト, Jmeter(ジェイメーター) や
Apache Bench(アパッチベンチ)などによ
るパフォーマンステストなどなどを⾏い、
ChatWork や Slack といったチャットツー
ルにフィードバックする。などの構成が例
として挙げられる。
どこまでやるかは担保すべき品質の定義次
第である。
github を利⽤する場合、多くのツールが
Jenkins を介さなくても連携できるため、
その点で github のバリューは⾼い。お値
段も⾼い。
.
.
.
Server & Security
(サーバーとセキュリティ)
Various kind of servers
Server
(サーバー)
Cloud
(クラウド)
On Premise
(オンプレミス/オンプレ)
AWS
(エーダブリューエス)
heroku
(ヘロク)
Data Center
(データセンター)
Server Room
(サーバールーム)
例えば、普段は10くらいでそんなにアクセスがないけど、クリスマスシーズンはアクセスが100倍くらい増え
るというようなサービスの場合…
オンプレの場合、クリスマスシーズンに対応できる分のサーバーを購⼊して、設置しておく必要がある。お⾦
がかかるし、本当にそれで⼤丈夫か確証はない。
クラウドサーバーの場合、クリスマスシーズンのみ必要な分だけ増やして、普段は10にしておくということが
できる。無駄がない。
タイプ
例
Various kind of access
サーバーとの通信⽅法の種類のことをプロトコルと呼ぶ。サーバーはプロトコルごとに番号で指定された⼊り⼝を持っ
ており、それをポートと呼ぶ。ssh 通信のことを22番通信と呼んだりもする。サーバー管理者は必要に応じて、ポート
を開いたり閉じたり、番号を変えたりする。不⽤意に開いていると、いたずらされたり、ドロボウが⼊ってくる。通信
の制限のことを、Fire Wall(ファイヤーウォール)と呼ぶ。
通常はサービス単位でFire wallを設定するが、例えば中国の Great Fire Wall(グレートファイヤーウォール)のような、
Facebook や Twitter などの SNS への通信を国として制限している場合もある。
Protocol
(プロトコル)
Default Port

(ポート)
⽤途 関連⽤語
http
(エイチティティピー)
80
通常のブラウザアクセ
ス
https
(エイチティティピーエス)
443
個⼈情報等を送信する
時に暗号化する
SSL(エスエスエル)

SSL通信, SSL証明書
FTP
(エフティピー)
20, 21
ファイルをアップロー
ド・ダウンロードする
ssh
(エスエスエイチ)
22
サーバに⼊って⾊々や
る
Command Line

(コマンドライン)

(cmd, cli)
SMTP

(エスエムティピー)
23 メール
Fire Wall & Proxy
Fire Wall は特定の相⼿からの通信を遮断したり、特定の相⼿
からの通信だけを許可したりします。
This is Hiroshi speaking.
Can I talk to Ms. Hang??
Hiroshi san
Hang san
Fire Wall
Hiroshi さんと話
してはいけません。
Nguyen san
Nguyen さんとは
OK です。
This is Nguyen speaking.
Can I talk to Ms. Hang??
Fire Wall & Proxy
Fire Wall に通信をはじかれてしまう場合、別⼈になりすましてアクセスすることがあり
ます。別⼈になりすますことを Proxy(プロクシー)を通すとか Proxy をさすとか表現し
ます。(プロクシー → 串 → 刺す)
Could you call Ms. Hang?
Hiroshi san
Hang san
Fire Wall
Hiroshi さんと話
してはいけません。
Nguyen san
Nguyen さんとは
OKです。
OK, I got it.
This is Nguyen speaking.
Can I talk to Ms. Hang??
Yes, I'm here.
NAT(ナット)
個別に直接通信するのではなく、NAT(Nguyen Anh Tuan Network Address Transfer)サーバーを介して通
信するようにすることで、セキュリティを向上させることができます。Bastion(バッション/踏み台)サー
バーと呼ぶこともあります。
ssh 通信を Bastion サーバー経由で⾏うことを多段ssh(ただんエスエスエイチ), ssh tunnel(エスエスエイ
チ・トンネル), Port forward(ポート・フォワード)などという⾔葉を使って表現します。
NAT サーバーを経由する設定のことを Route Table(ルートテーブル)と呼びます。
セキュリティ⽬的ではありませんが、http/https のリクエストを⼀括で受けて、それぞれの Web サーバー
に振り分ける⽬的で Proxy サーバーを設置することもあります。先程の Proxy との違いは、ユーザー側で
はなく、サーバー側がなりすます点です。
Hiroshi san Hang sanFire Wall
NAT Server
(Nguyen san)
Nguyen さんとだけ
話してください。
Subnet(サブネット)
Subnet(サブネット)とは、Network を⼩分けにしたものです。セキュリティのためであっ
たり、役割のためであったりグルーピングしてあった⽅が何かと便利なことがあるので、
Subnet に分割します(本来の⽬的は違うけどいまは省略)。IP Address はインターネット
上の住所ですが、フロアくらいに思っておくと良いかも知れません。会社の受付があったり
来客⽤スペースがある Public なフロア、従業員が業務を⾏う Private なフロアなど。
IP Address 的には、以下のようになります。
Public Subnet
Private Subnet
Network
xxx.xxx.xxx.xxx
ネットワーク部
サブネット部
ホスト部
NACL & SG
Subnet に設定するセキュリティ設定のことを Network ACL(ネットワーク
エーシーエル)とか、NACL(ナクル)と呼びます。Network Access Control
Lists の略です。NACL では⼤雑把に許可する通信を設定します。
個別のサーバーにはそれぞれ個別に細かくセキュリティの設定をします。利⽤
しない Port を開けておくのは危ないので、必要な Port だけを開けるように
設定します。その設定は使い回しができるので、Security Group(セキュリ
ティグループ)と呼ばれています。
NACL と SG では、⼊ってくるものと出て⾏くものに分けて設定を⾏います。
⼊ってくるものを Inbound(インバウンド), 出ていくものを Outbound (アウ
トバウンド)と呼びます。
Public Subnet
Private Subnet
NACL
Security Group(SG)
Inbound Outbound
Availability Zone
(アベイラビリティゾーン)
NAT
Web Server API Server XX server
全部同じところに置いておくと、何か問題が発⽣した時に困るので、別のと
ころにバックアップを作り、⼿動/⾃動で切り替えます。
AWS では、⼤きく分けて Region(リージョン)とAvailability Zone(アベイラ
ビリティ・ゾーン、AZ)の2種類の Zoning の考え⽅があります。Region は
Tokyo とか Oregon とかサーバーが置いてある場所が全然違います。AZ
は、同じ Region 内にありますが、それぞれがなるべく影響しないように設
置されています。
Region ごとに提供されるサービスが異なります。
AWS で現在(1/12/2017)提供されているリージョンは、
North Virginia, Ohio, North Carolina, Oregon, Canada, Ireland,
Frankfurt, London, Tokyo, Seoul, Singapore, Sydney, Mumbai, San Paulo
で、最近中国から AWS は撤退・パートナー企業に譲渡されたので、Beijing
Region は AWS としてのサービスからは外れました。
AZ: a AZ: c
AZ AZ
AZ
Region
AZ AZ
AZ
Region
AZ AZ
AZ
Region
Region & Availability Zone
AZ: a
Load Balancer
(ロードバランサー)
LB
Web Server WEB Server WEB server
⼀度にたくさんのアクセスがあった場合、1台のサーバーでは処
理しきれなくなることがあります。その場合、同じ構成のサー
バーを⽤意しておいて、リクエストを分散させて処理を⾏いま
す。負荷分散と呼び、それを⾏うものを Load Balancer(ロード
バランサー)と呼びます。AWS では、ELB(イーエルビー/Elastic
Load Balancer) とか ALB(エーエルビー/Application Load
Balancer)と呼ばれています。ALB は ELB の新しいバージョンな
ので、今後 ELB を積極的に選択する理由はあまりありません
が、AWS の LB は古くから ELB と呼ばれてきたので、ALB も
ひっくるめて ELB と呼ぶことが多い気がします。
オンプレミスの場合、たくさんのアクセスを想定し、サーバーを
⽤意する必要がありますが、クラウドの場合、必要に応じて増や
すことができます。サーバーを増やすことを Scale out(スケー
ルアウト)と⾔い、ELB の機能で、ある⼀定の条件を超えたら⾃
動で増やす Auto Scaling(オートスケーリング)というものがあ
り、お財布に優しくなっています。Auto Scaling はサーバー郡
に対して設定できます(Auto Scaling Group)。


⼀⽅で、サーバーの容量や処理能⼒⾃体を増強して処理を⾏う場
合もあり、これを Scale Up(スケールアップ)と呼びます。
トラフィックを振り分ける
同じ内容のサーバー
普段はないけど、状況に応じ
てどんどん増やす/増える
(スケールアウト)
Various type of Servers
タイプ ⽤途 例 メモ
EC2
(イーシーツー/Elastic
Compute Cloud)
いわゆる普通のサーバ
ー
AMI(エーエムアイ/
Amazon Machin
Image)から簡単に⽴ち
上げられる
RDS
(アールディーエス/
Relational Database
Service)
データベース
Oracle, MySQL,
PostgreSQL
(オラクル, マイエスキ
ューエル, ポスグレ)
ElastiCache
(エラスティキャッシュ)
KVS(ケーブイエス/Key
Value Store)
キャッシュ
Redis, Memcache
(レディス, メムキャッ
シュ)
On Memory(オンメモ
リー)のキャッシュ。ア
クセスが速い。
S3
(エススリー/Simple
Storage Service)
File Storage

(ファイルストレージ)
ファイル置き場
S3の中にBucket(バケッ
ト)と呼ばれる容れ物を
作って使う
NoSQL
(ノーエスキューエル)
データベース
MongoDB
(モンゴデービー)
それぞれのサーバー1台1台のことをInstance(インスタンス)と呼び(EC2インスタンスとか)、インスタン
スごとにスペックを設定する。Small とか Large とか。
Other services
サービス名 ⽤途 メモ
SES
(エスイーエス/Simple Email
Service)
メール送信
オレゴンかバージニア。

EC2インスタンス内に、
SendMail(センドメール)や
Postfix(ポストフィックス)を建て
ても良い
KMS
(ケーエムエス/Key
Management Service)
暗号化キー
IAM

(アイアム/Identity and Access
Management)
アカウント
個別リソースへの権限設定をす
る。個別のアカウントの他、
IAM Role と呼ばれるサーバーに
付与するものもある設置する
Code Commit
(コードコミット)
バージョン管理
ソースコードのバージョン管理
ができる。IAM が必要。
VPC
(ブイピーシー/Virtual Private
Cloud)
サーバー群をひとまとめにする
括りのこと
VPC 同⼠を接続することを Peer
Connect(ピアコネクト)と⾔
う。同⼀ Region 内で Private IP
が被らない場合に接続できる
Distribution Tool
(ディストリビューションツール)
同じことをいちいち設定するのが⾯倒なので、設定ファイルを書いてコマンド等を実⾏して
簡単に再現できるようにする構成管理ツールのこと。設定の(半)⾃動配信。
VPC 全体の設定(ネットワーク設定など)を再現する場合は、CloudFormation(クラウド
フォーメーション),
個別サーバーの設定(インストールやアプリケーション設定、ソースコード配置など)は、
Ansible(アンシブル)やChef(シェフ・チェフ)などを利⽤するのが⼀般的。
基本的には、xml(エックスエムエル) や yml(ヤムル・ワイエムエル), json(ジェイソン) 等
に設定を書く。Template(テンプレート)と⾔ったり、Playbook(プレイブック)と⾔った
り、Cookbook, recipe(クックブック, レシピ)と⾔ったりする。
よく⽿にする Command
コマンド名 ⽤途 メモ
yum

(ユム・ヤム)
インストールに使う
rpm(アールピーエム), apt, apt-
get(アプト, エーピーティ) など
⾊々
ソースコードからインストール
する場合は、configure(コンフ
ィギュア)して、make(メイク)
する
grep

(グレップ)
⽂字列検索
nc

(エヌシー, ネットキャット)
ネットワークの疎通確認に使う
相⼿のPortを指定して通信でき
るか調べる
sudo
(スドゥ, スドー)
root(ルート) ユーザとして実⾏
する
SuperUserDo
その他に、AWS 専⽤のコマンド aws-cli などをインストールして使ったりすることもある。
コマンド名が、ちょっと頭おかしい感じなのは、きっと当時作った⼈が疲れてたからに違いない。
ギットハブのマスターから開発ブランチ切って、そこで実装してく
ださい。コーディング規約はピーエスアールツーで、レビューする
の⾯倒なのでコミットする前にピーエイチピーシーエスフィクサー
とかでチェックしてください。実装終わったらマスターにたいして
プルリク投げてください。レビューしてオッケーならマスターに
マージします。
マスターにマージされたらジェンキンスがウェブフックでセレニウ
ムをキックして、カレント環境に対してテストするから、それが終
わったらそれも確認してくださいね。
全部問題なかったらステージング環境にアップして、再度テスト。
それも問題なかったらピーオーの承認もらって、プロダクション環
境にデプロイするから、デプロイ完了したら本番にアクセスして
ざっとウォークスルーして、チャットワークで報告してください。
練習問題
倉林 寛⾄ - Kurabayashi Hiroshi
CIO at LIFULL Tech Vietnam Co.,Ltd., HCMC
@kura kura@lifull-tech.vn
We are hiring!
http://lifull-tech.vn
オリジナルとなる英語単語の抑揚をなくし、短⾳を短くせず、⾳節ごとに語尾までハッキリ発⾳すると、⾃然なカタカナ英語になる。

More Related Content

IT魔導の書 ~ Grimoire du IT

  • 1. GRIMOIRE du IT Eloim, Essaim, frugativi et appellavi First Edition - 07/12/2017 written by anh kura (LFTV) エロイム, エッサイム, 我は求め訴えたり IT 魔導の書
  • 2. Summary & Index IT 業界では⽇々数多くの呪⽂が唱えられ ている。多くはオリジナルの英語がその まま使われる。これは⽇本においても同 様であるが、⽇本では正しく発⾳され ず、カタカナ英語となっており、オリジ ナルとはかけ離れた呪⽂になっているこ とが多い。 本書は、⽇系 IT 企業においてコミュニ ケーターを⽬指す⼈向けに、必要最低限 となる⽇本語の呪⽂を浅く解説した⼊⾨ 書である。 内容に関して多少偏りがあることは認識 いる。 Index - Internet
 (インターネット) - Development Process
 (開発⼯程) - Inside of Server
 (サーバーの中⾝) - Implementation
 (実装) - Test
 (テスト) - Server & Security
 (サーバーとセキュリティ)
  • 4. How Internet works? Device(デバイス): - PC(ピーシー) - Smart Phone(スマホ) - Tablet(タブレット) Browser(ブラウザー): - IE(アイイー) - Chrome(クローム) - Firefox(ファイヤー・フォックス) Access(アクセス) Response(レスポンス・応答) User/Consumer
 (ユーザー/コンシューマー) Service (サービス) SNS(エスエヌエス) Blog(ブログ) Search Engine(検索エンジン) - Google(グーグル)
 - Yahoo!(ヤフー) → ググる(Search by google) Chat tool(チャットツール) - ChatWork(チャットワーク)
 - Slack(スラック) etc.
  • 5. How Internet works?(DNS) User/Consumer
 (ユーザー/コンシューマー) Name Server (ネーム・サーバー) Server (サーバー) www.homes.co.jp lifull-tech.vn www.homes.co.jp = 123.223.111.xxxlifull-tech.vn = xxx.xxx.xxx.xxx lifull-tech.vn server xxx.xxx.xxx.xxx HOME’S server xxx.xxx.xxx.xxx Domain(ドメイン) URL(ユーアールエル) URL(ユーアールアイ) IP Address(アイピーアドレス) Global IP(グローバルアイピー) インターネットの住所は数字の羅列。 ⾜らなくなって困ってる。 DNS(ディーエヌエス)? Domain Name System(ドメイン・ネーム・システム) Address book of Internet. インターネットのアドレス帳のこと
  • 6. How Internet works?(hosts) Name Server (ネーム・サーバー) anhkura.vn No. Idk xxx.xxx.xxx.xxxHosts file (ホスツ) Okay. Got it! Hosts(ホスツ)ファイルとは、アドレス帳のことで、IP アドレ スと呼び⽅を登録しておくと、設定した呼び⽅で、サーバーを 呼び出すことができるようになる。個⼈の PC かサーバー上で 設定する。 例えば、個⼈の開発環境は社内だけで分かれば良いので、 Global な Name Server に登録する必要はなく(しない⽅が 良く)、Hosts に設定するのが⼀般的である。 Mac(マック) や Ubuntu(ウブンチュ)などの Unix(ユニック ス)/Linux(リナックス)系OSの場合は、/etc/hosts にあり、 Windows の場合は、バージョンによって異なるが Windows/ system32/drivers/etc/hosts などにある。 Hosts に記載がある場合は、Name Server より優先される。 Name(ネーム)がひけない 名前解決できない などと⾔う
  • 8. Development Process Marketing
 (マーケティング/市場調査) Planning
 (プランニング/企画/
 要件定義) Sales/Consultant
 (営業/コンサル) Design
 (デザイン) Development
 (開発) Test
 (テスト) UAT: User Acceptant Test
 (受け⼊れテスト) Launch/Release/Deployment (ローンチ/リリース/デプロイ) Customer(お客様) Development Team(開発チーム) Upstream Process (上流工程) UT: Unit Test(ユニットテスト) Integration Test(結合テスト) Performance Test(パフォーマンステスト) Security Test(セキュリティテスト・脆弱性テスト)
  • 9. Various kind of process management Flow type Methodology
 (メソドロジー/⼿法) 考え⽅ Water fall
 (ウォーターフォール) PMBOK(ピンボック) プロセスごとに役割分担が決ま っており、完了させたら、次へ 次へと渡していく。仕様書が完 璧な場合うまくいく。 Agile
 (アジャイル) Scrum(スクラム) Lean(リーン) XP: eXtrem Programming
 (エックスピー), Kanban(カンバン) etc 細かくフィードバックを受けな がら認識の齟齬がないように、 より意味のあるプロダクトが作 れるように進める。 ⽇本は契約の⽂化である点と、 発注側の負担が⼤きいのであま りやりたがらない。
  • 10. Roles(ロール/役割) PO: Product Owner
 PM: Project Manager (ピーオー/ピーエム) プロジェクトの責任者。 お客様であることがほとんど。 お⾦を出す意思決定をできる⼈で ない場合は、注意が必要。 Designer
 (デザイナー) デザインする⼈。⽇本では html, css まで書く場合が多い html, css だけ書く⼈は、Coder
 (コーダー)と呼ばれることがある。 ⽇本にだけある特殊な職種。 Developer
 (デベロッパー) Frontend Engineer
 (フロントエンドエンジニア) プログラムを書く⼈。 アプリケーションを作る。 Server side Engineer
 (サーバーサイドエンジニア) Infrastructure Engineer
 (インフラエンジニア) Network Engineer
 (ネットワークエンジニア) サーバの設定等をやる⼈。 ベトナムにはあんまりいない。 Tester
 (テスター) QA: Quality Assurance
 (キューエー) QC: Quality Control
 (キューシー) テストしたり、テストを設計したり、 プロダクトの品質を管理する⼈。 Scrum Master
 (スクラムマスター) Scrum(スクラム)でやる場合の
 PM みたいな⼈。 PO/PM との違いは⼈事権以外の 意思決定権がないことなど。
  • 11. Keywords of Scrum Keyword (キーワード) Description
 (意味) Keyword (キーワード) Description
 (意味) practice (プラクティス) Scrum の中で⾏うイベント Ticket
 (チケット) タスク管理ツールなどで管理されるタ スク planning (プランニング) 計画 Kanban/Scrum Board
 (カンバン/スクラムボード) タスクを可視化する表 Sprint/Iteration (スプリント/イテレーション) 開発期間全体を⼀定期間ごとに区切っ て開発をする区切りのこと Velocity
 (ベロシティ) チームの開発速度 Daily Scrum/Daily Stand up (デイリースクラム/デイリースタンド アップ) 朝会 Pair Programming
 (ペアプロ) スキルの共有等の⽬的で、
 2⼈1組でプログラミングを⾏う。 Review
 (レビュー) プロダクトオーナーにデモを⾏い、フ ィードバックを受ける CI/CD: Continuous Integration/ Delivery
 (シーアイ/シーディ) 継続してリリースするための仕組み化 のことを⾔うことが多い Retrospective
 (レトロスペクティブ) プロセスの振り返り会。
 改善案を話し合う Product Backlog
 (プロダクトバックログ) 要件リスト
 プロダクトオーナーが管理 Priority
 (プライオリティ/優先順位) 優先順位。必ず優先順位順に作る。
  • 13. Programming Language (プログラミング⾔語) Type 例 Compiler Language
 (コンパイラ⾔語) Java(ジャバ), C(シー), C++(シープラプラ), C#(シーシャープ) etc Script Language (スクリプト⾔語) PHP(ピーエイチピー), Ruby(ルビー), JavaScript(ジャバスクリプト,ジャ バスク), Python(パイソン) etc. Functional Language (関数型⾔語) Haskel(ハスケル), Lisp(リスプ), Scala(スカラ), etc
  • 14. Web Server (ウェブサーバー) Web サーバーには、httpd(エイチティティピーディー, エイチティティピーデーモン) をインストール・設定する必要がある。 
 Apache(アパッチ), Nginx(エンジンエックス), Tomcat(トムキャット), Unicorn(ユ ニコーン)など⾊々なものがある。 virtual hosts, vhosts(バーチャルホスト, ブイホスツ)を設定し、リクエストを受けた場 合に、何をどのように実⾏させるかなどを設定する。他にも⾊々設定する。
  • 15. OS (オーエス) PC のローカルマシンの OS としてポピュラーなのは、Windows(ウィンドウズ), Mac(マック), Ubuntu (ウブンチュ)あたりで、スマートフォンの場合は、Android(ア ンドロイド), iOS (アイオーエス)など。 サーバー⽤としては、Unix(ユニックス), Linux(リナックス) 系の OS が多く、Linux の Distribution として、AmazonLinux(アマゾンリナックス), CentOS(セントオーエ ス), Redhat Linux(レッドハットリナックス) などなど⾊々なものがある。それぞれ違 いがあり、⽤途によって使い分けるが、まぁ AmazonLinux で良いかという⾵潮があ ることは否めない。 サーバー⽤の OS には基本的に GUI (ジーユーアイ, Graphical User Interface) がな く、デスクトップをマウスで操作するようなことはせず、コマンドを打って作業す る。コマンドを打って作業する画⾯のことを、CUI(シーユーアイ, Character User Interface)と呼んだり、CLI(シーエルアイ, Command Line Interface)コマンドを打 つ画⾯(アプリ)のことを Prompt(プロンプト)とか Terminal (ターミナル)などと呼ん だりするが、⽬に優しく⿊背景に設定する⼈が多い。以前、営業の⼈に「⿊い画⾯を 開いている時は話しかけないようにしている」などと⾔われたことがあり、反省し た。
  • 18. Stage(ステージ) 開発の状態、進捗に応じて確認する環境を切り替える。最終的には本番環境へのリリースとなる。 上位サーバーへのリソースの配置を、Deploy(デプロイ) などと⾔う。 Live, Production(ライブ, プロダクション)環境。本番環境。 Pool(プール)環境。リリース直前の Production 環境と全く同じ構成の環境。 Staging(ステージング)環境とも⾔う。最終的なテストを⾏う Backstage(バックステージ)環境。今回リリースする対象のファイル等のみがアッ プされたテスト環境。ない場合もある。 Current(カレント)環境。各チームが開発中のものが集められたテスト環境。git を 使う場合、あまり必要がない。 Unit(ユニット)環境。個⼈の開発環境 ステージの例)
  • 19. Version Control (バージョン管理) 複数⼈のチームで開発する場合、誰がいつ何を変更したのかの履歴を管理する必要が ある。リリースしたらバグがあったので、急遽前のバージョンに戻したいなどの状況 も考えられる。その際に利⽤するのがバージョン管理システムで、CSV(シーエスブ イ), SVN(エスブイエヌ), Git(ギット)などがある。現在主流は、Git だが、SVN もま だまだ残っている。 Git は⾃分でシステムを⽤意することも出来るが、便利なツールを統合したサービスを 利⽤するのが⼀般的で、代表的なものとして、github(ギットハブ), bitbucket(ビット バケット), gitlab(ギットラブ・ギットラボ)などがある。 github のマスコットキャラクターは、Octocat(オクトキャット)と呼ばれており、可 愛い。
  • 20. Version Control(バージョン管理) git remote [app repository] master branch feature branch1 (remote) feature branch2 feature branch1 (local) feature branch1 commit push checkout branch を切る merge/ PR アプリケーションごとに repository(リポジトリー) を作成し、defalut になっている master ブランチや develop ブランチなどから、開発⽤の branch(ブラ ンチ)を作成(ブランチを切る)して、開発を⾏う。基 本的には、ローカル環境にcheckout(チェックアウ ト)/clone(クローン) して、ローカルでの開発を進 め、commit(コミット) したり push(プッシュ) した りする。サーバー上のものを remote(リモート)、⼿ 元のものを Local(ローカル)と⾔う。 リリースする状態になった場合、master/develop ブランチに merge(マージ) する。merge する際に 直接 merge する場合と、承認を経てから merge す る Pull request(プルリクエスト・プルリク・RP )を する場合がある。git を使った開発フローとして、 git-flow, github-flow などがあり、どのような⽅法 を取るかは、規模や状況によって変わってくる。 同じ箇所を修正してバッティングすることを、 Conflict (コンフリクト)と⾔う。コンフリクトした ら泣きながら修正する。
  • 21. Coding Standard (コーディング規約) 複数⼈で開発をする場合、体裁が整っていないとソースコードは読みづらいので、書き⽅ を統⼀します。コーディングのガイドラインのことを Coding Standard(コーディング規 約)と呼び、⼀般的なものもあれば、独⾃で決めたものもあり、様々です。例えば PHP で あれば、PSR-2(ピースエアールツー)などが有名です。 基本的に規約に則った書き⽅を⼼がけるべきですが、個⼈の⼼がけに依存すると定着しな いことが多いため、システムで守らせるようにするのがスマートです。PHP であれば、 php-cs-fixer(ピーエイチピーシーエスフィクサー)、Ruby であれば rubocop(ルボコッ プ・ロボコップ)などを利⽤するのが良いです。コーディング規約に限らず、ソースコー ドをツールで解析することを、Static Code Analysis(静的コード解析)と呼びます。 コーディング規約の範疇なのか範疇外なのか微妙なところですが、コードを読みやすくす るために⽇本で広く知られており、「これくらい⾔わなくてもやって当然」と思われてい るのが、The Art of readable code(リーダブルコード)という書籍です。⼤事なことは、 どのようにコードを書くかについて共通認識を持つことです。それぞれが⾃⼰流にカスタ マイズしては意味がありません。
  • 22. Object-oriented (オブジェクト指向) Object-oriented Programming(オブジェクト指向, OOP)とは、オブジェクト同⼠の相互作⽤とし て、システムの振る舞いを捉える考え⽅のことで、Encapsulation(カプセル化)、, Composition, inherit and delegation(継承)、Polymorphism (ポリモーフィズム)といった特徴を持ちます。ナンノ コッチャ!まぁ、みんなで開発する時に、便利な考え⽅だと思っておけば良いです。 オブジェクト指向のベスト・プラクティスをまとめたものをDesign Pattern(デザインパターン)と呼 び、様々なパターンがあります。実際にデザインパターンを意識してコーディングできる⼈は多くはな いです。デザインパターンの中で最も有名なのが、MVC(エムブイシー) パターンです。Model(モデ ル)-View(ビュー)-Controller(コントローラー)と⼤きく3つの役割に分けて実装する⽅法で、多くの Framework (フレームワーク)に取り⼊れられています。 MVCフレームワークは、例えば… - PHP: ZendFramework(ゼンド), CakePHP(ケイク), Symfony(シンフォニー), Laravel(ララベル)…
 - Ruby: Ruby on Rails(RoR, レイルズ), Sinatra(シナトラ) - Java: Struts(ストラッツ) などなど。これらの View には、Template Engine(テンプレートエンジン)が採⽤されていることがほ とんどで、有名なところでは、Smarty(スマーティ), Twig(ツイグ、トゥイグ), Blade(ブレード)など があります。 近年の開発は、フレームワークを利⽤することが⼀般的であり、オブジェクト指向を理解したつもりに なってしまう⼈が多く、経験を積んでもスキルが伸びない原因の1つになっています。 理由は様々ですが、複雑になりすぎたコードや汚いコードのことを Spaghetti Code(スパゲッティ コード) と呼んだり、クソース, ウンコードなどと呼んだりします。
  • 24. Test(テスト) Test には⾊々な種類がある。⼤雑把に⾔えば、Unit Test(単体テスト)→ Integration Test(結合テスト)→System Test (システムテスト)→Acceptance Test(受け⼊れテスト) の順番で⾏われる。 まずは、要求を分析し、どのような Test View Point(テスト観点)でテストすべきかを考 え、スケジュールに落とし込む Test Planning(テスト計画)を⾏う。Test View Point に は、機能要件のテストだけでなく、⾮機能要件のテストもあり、例えば、Performance Test(パフォーマンステスト), Security Test(セキュリティテスト/脆弱性テスト)などがあ る。 要求に基づき、Test Spec/Test Case(テスト仕様書)を作成し、テストを実施する。 Test の中には、他の機能に影響が出ていないかを調べる Regression Test(リグレッション テスト, 回帰テスト)や、ざっと確認する Smoke Test(スモークテスト), ⼀通り機能を使っ てみる Walkthrough Test(ウォークスルーテスト), 特別情報を与えずユーザーとして使っ てみる Monkey Test(モンキーテスト)など⾊々なものがあり、必要に応じて使い分ける。 ISTQB(アイエスティキュービー, International Software Testing Qualification Boards) という団体があり、資格を発⾏している。テストにおいて国際的に通じる共通⾔語として ⼤変有益であり、LFTV においては、QA としての採⽤は ISTQB Foundation の資格を必 須とし、何となくテストしないようにしている。
  • 25. Test(テスト) Test 何? 誰がやる? Unit Test (ユニットテスト/単体テスト, UT) 関数やメソッド等の⼩さい単位での正しく動作するかのテス ト。開発者がテストコードを書く。 網羅率のことを Coverage(カバレッジ)と⾔う。 Developer Integration Test (インテグレーションテスト/結合テスト) 開発した機能が全体として正しく動作するかを検証する。 QA System Test
 (システムテスト) 本番環境とほぼ同じ環境で、全体として正しく動作するかを 検証する。 QA User Acceptance Test
 (アクセプタンステスト/受け⼊れテスト, UAT) 発注者の本来の⽬的・意図通りに動作しているかを発注者が 検証する Customer Requirement Analysis (要求分析) Requirement Definition (要件定義) Basic Design (基本設計) Specific Design (詳細設計) Coding (コーディング) Code Review (コードレビュー) Unit Test (単体テスト) Integration Test (結合テスト) System Test (システムテスト) Acceptance Test (受け⼊れテスト)
  • 26. Automation Test (⾃動テスト) 何度もやるテストは⾃動化すべきである。CI/CD の観点からも⾃動化を積極的に進めるべき。 Dev. Servers Jenkins Web Hook Feed back Clone Push Static Code Analysis Unit Test UI Test Jenkins(ジェンキンス)が git のリポジトリ のイベント(push など)を Webhook(ウェ ブフック)などで監視し、静的コード解析や UT, Selenium (セレニウム)による UI の⾃ 動テスト, Jmeter(ジェイメーター) や Apache Bench(アパッチベンチ)などによ るパフォーマンステストなどなどを⾏い、 ChatWork や Slack といったチャットツー ルにフィードバックする。などの構成が例 として挙げられる。 どこまでやるかは担保すべき品質の定義次 第である。 github を利⽤する場合、多くのツールが Jenkins を介さなくても連携できるため、 その点で github のバリューは⾼い。お値 段も⾼い。 . . .
  • 28. Various kind of servers Server (サーバー) Cloud (クラウド) On Premise (オンプレミス/オンプレ) AWS (エーダブリューエス) heroku (ヘロク) Data Center (データセンター) Server Room (サーバールーム) 例えば、普段は10くらいでそんなにアクセスがないけど、クリスマスシーズンはアクセスが100倍くらい増え るというようなサービスの場合… オンプレの場合、クリスマスシーズンに対応できる分のサーバーを購⼊して、設置しておく必要がある。お⾦ がかかるし、本当にそれで⼤丈夫か確証はない。 クラウドサーバーの場合、クリスマスシーズンのみ必要な分だけ増やして、普段は10にしておくということが できる。無駄がない。 タイプ 例
  • 29. Various kind of access サーバーとの通信⽅法の種類のことをプロトコルと呼ぶ。サーバーはプロトコルごとに番号で指定された⼊り⼝を持っ ており、それをポートと呼ぶ。ssh 通信のことを22番通信と呼んだりもする。サーバー管理者は必要に応じて、ポート を開いたり閉じたり、番号を変えたりする。不⽤意に開いていると、いたずらされたり、ドロボウが⼊ってくる。通信 の制限のことを、Fire Wall(ファイヤーウォール)と呼ぶ。 通常はサービス単位でFire wallを設定するが、例えば中国の Great Fire Wall(グレートファイヤーウォール)のような、 Facebook や Twitter などの SNS への通信を国として制限している場合もある。 Protocol (プロトコル) Default Port
 (ポート) ⽤途 関連⽤語 http (エイチティティピー) 80 通常のブラウザアクセ ス https (エイチティティピーエス) 443 個⼈情報等を送信する 時に暗号化する SSL(エスエスエル)
 SSL通信, SSL証明書 FTP (エフティピー) 20, 21 ファイルをアップロー ド・ダウンロードする ssh (エスエスエイチ) 22 サーバに⼊って⾊々や る Command Line
 (コマンドライン)
 (cmd, cli) SMTP
 (エスエムティピー) 23 メール
  • 30. Fire Wall & Proxy Fire Wall は特定の相⼿からの通信を遮断したり、特定の相⼿ からの通信だけを許可したりします。 This is Hiroshi speaking. Can I talk to Ms. Hang?? Hiroshi san Hang san Fire Wall Hiroshi さんと話 してはいけません。 Nguyen san Nguyen さんとは OK です。 This is Nguyen speaking. Can I talk to Ms. Hang??
  • 31. Fire Wall & Proxy Fire Wall に通信をはじかれてしまう場合、別⼈になりすましてアクセスすることがあり ます。別⼈になりすますことを Proxy(プロクシー)を通すとか Proxy をさすとか表現し ます。(プロクシー → 串 → 刺す) Could you call Ms. Hang? Hiroshi san Hang san Fire Wall Hiroshi さんと話 してはいけません。 Nguyen san Nguyen さんとは OKです。 OK, I got it. This is Nguyen speaking. Can I talk to Ms. Hang?? Yes, I'm here.
  • 32. NAT(ナット) 個別に直接通信するのではなく、NAT(Nguyen Anh Tuan Network Address Transfer)サーバーを介して通 信するようにすることで、セキュリティを向上させることができます。Bastion(バッション/踏み台)サー バーと呼ぶこともあります。 ssh 通信を Bastion サーバー経由で⾏うことを多段ssh(ただんエスエスエイチ), ssh tunnel(エスエスエイ チ・トンネル), Port forward(ポート・フォワード)などという⾔葉を使って表現します。 NAT サーバーを経由する設定のことを Route Table(ルートテーブル)と呼びます。 セキュリティ⽬的ではありませんが、http/https のリクエストを⼀括で受けて、それぞれの Web サーバー に振り分ける⽬的で Proxy サーバーを設置することもあります。先程の Proxy との違いは、ユーザー側で はなく、サーバー側がなりすます点です。 Hiroshi san Hang sanFire Wall NAT Server (Nguyen san) Nguyen さんとだけ 話してください。
  • 33. Subnet(サブネット) Subnet(サブネット)とは、Network を⼩分けにしたものです。セキュリティのためであっ たり、役割のためであったりグルーピングしてあった⽅が何かと便利なことがあるので、 Subnet に分割します(本来の⽬的は違うけどいまは省略)。IP Address はインターネット 上の住所ですが、フロアくらいに思っておくと良いかも知れません。会社の受付があったり 来客⽤スペースがある Public なフロア、従業員が業務を⾏う Private なフロアなど。 IP Address 的には、以下のようになります。 Public Subnet Private Subnet Network xxx.xxx.xxx.xxx ネットワーク部 サブネット部 ホスト部
  • 34. NACL & SG Subnet に設定するセキュリティ設定のことを Network ACL(ネットワーク エーシーエル)とか、NACL(ナクル)と呼びます。Network Access Control Lists の略です。NACL では⼤雑把に許可する通信を設定します。 個別のサーバーにはそれぞれ個別に細かくセキュリティの設定をします。利⽤ しない Port を開けておくのは危ないので、必要な Port だけを開けるように 設定します。その設定は使い回しができるので、Security Group(セキュリ ティグループ)と呼ばれています。 NACL と SG では、⼊ってくるものと出て⾏くものに分けて設定を⾏います。 ⼊ってくるものを Inbound(インバウンド), 出ていくものを Outbound (アウ トバウンド)と呼びます。 Public Subnet Private Subnet NACL Security Group(SG) Inbound Outbound
  • 35. Availability Zone (アベイラビリティゾーン) NAT Web Server API Server XX server 全部同じところに置いておくと、何か問題が発⽣した時に困るので、別のと ころにバックアップを作り、⼿動/⾃動で切り替えます。 AWS では、⼤きく分けて Region(リージョン)とAvailability Zone(アベイラ ビリティ・ゾーン、AZ)の2種類の Zoning の考え⽅があります。Region は Tokyo とか Oregon とかサーバーが置いてある場所が全然違います。AZ は、同じ Region 内にありますが、それぞれがなるべく影響しないように設 置されています。 Region ごとに提供されるサービスが異なります。 AWS で現在(1/12/2017)提供されているリージョンは、 North Virginia, Ohio, North Carolina, Oregon, Canada, Ireland, Frankfurt, London, Tokyo, Seoul, Singapore, Sydney, Mumbai, San Paulo で、最近中国から AWS は撤退・パートナー企業に譲渡されたので、Beijing Region は AWS としてのサービスからは外れました。 AZ: a AZ: c AZ AZ AZ Region AZ AZ AZ Region AZ AZ AZ Region Region & Availability Zone AZ: a
  • 36. Load Balancer (ロードバランサー) LB Web Server WEB Server WEB server ⼀度にたくさんのアクセスがあった場合、1台のサーバーでは処 理しきれなくなることがあります。その場合、同じ構成のサー バーを⽤意しておいて、リクエストを分散させて処理を⾏いま す。負荷分散と呼び、それを⾏うものを Load Balancer(ロード バランサー)と呼びます。AWS では、ELB(イーエルビー/Elastic Load Balancer) とか ALB(エーエルビー/Application Load Balancer)と呼ばれています。ALB は ELB の新しいバージョンな ので、今後 ELB を積極的に選択する理由はあまりありません が、AWS の LB は古くから ELB と呼ばれてきたので、ALB も ひっくるめて ELB と呼ぶことが多い気がします。 オンプレミスの場合、たくさんのアクセスを想定し、サーバーを ⽤意する必要がありますが、クラウドの場合、必要に応じて増や すことができます。サーバーを増やすことを Scale out(スケー ルアウト)と⾔い、ELB の機能で、ある⼀定の条件を超えたら⾃ 動で増やす Auto Scaling(オートスケーリング)というものがあ り、お財布に優しくなっています。Auto Scaling はサーバー郡 に対して設定できます(Auto Scaling Group)。 
 ⼀⽅で、サーバーの容量や処理能⼒⾃体を増強して処理を⾏う場 合もあり、これを Scale Up(スケールアップ)と呼びます。 トラフィックを振り分ける 同じ内容のサーバー 普段はないけど、状況に応じ てどんどん増やす/増える (スケールアウト)
  • 37. Various type of Servers タイプ ⽤途 例 メモ EC2 (イーシーツー/Elastic Compute Cloud) いわゆる普通のサーバ ー AMI(エーエムアイ/ Amazon Machin Image)から簡単に⽴ち 上げられる RDS (アールディーエス/ Relational Database Service) データベース Oracle, MySQL, PostgreSQL (オラクル, マイエスキ ューエル, ポスグレ) ElastiCache (エラスティキャッシュ) KVS(ケーブイエス/Key Value Store) キャッシュ Redis, Memcache (レディス, メムキャッ シュ) On Memory(オンメモ リー)のキャッシュ。ア クセスが速い。 S3 (エススリー/Simple Storage Service) File Storage
 (ファイルストレージ) ファイル置き場 S3の中にBucket(バケッ ト)と呼ばれる容れ物を 作って使う NoSQL (ノーエスキューエル) データベース MongoDB (モンゴデービー) それぞれのサーバー1台1台のことをInstance(インスタンス)と呼び(EC2インスタンスとか)、インスタン スごとにスペックを設定する。Small とか Large とか。
  • 38. Other services サービス名 ⽤途 メモ SES (エスイーエス/Simple Email Service) メール送信 オレゴンかバージニア。
 EC2インスタンス内に、 SendMail(センドメール)や Postfix(ポストフィックス)を建て ても良い KMS (ケーエムエス/Key Management Service) 暗号化キー IAM
 (アイアム/Identity and Access Management) アカウント 個別リソースへの権限設定をす る。個別のアカウントの他、 IAM Role と呼ばれるサーバーに 付与するものもある設置する Code Commit (コードコミット) バージョン管理 ソースコードのバージョン管理 ができる。IAM が必要。 VPC (ブイピーシー/Virtual Private Cloud) サーバー群をひとまとめにする 括りのこと VPC 同⼠を接続することを Peer Connect(ピアコネクト)と⾔ う。同⼀ Region 内で Private IP が被らない場合に接続できる
  • 39. Distribution Tool (ディストリビューションツール) 同じことをいちいち設定するのが⾯倒なので、設定ファイルを書いてコマンド等を実⾏して 簡単に再現できるようにする構成管理ツールのこと。設定の(半)⾃動配信。 VPC 全体の設定(ネットワーク設定など)を再現する場合は、CloudFormation(クラウド フォーメーション), 個別サーバーの設定(インストールやアプリケーション設定、ソースコード配置など)は、 Ansible(アンシブル)やChef(シェフ・チェフ)などを利⽤するのが⼀般的。 基本的には、xml(エックスエムエル) や yml(ヤムル・ワイエムエル), json(ジェイソン) 等 に設定を書く。Template(テンプレート)と⾔ったり、Playbook(プレイブック)と⾔った り、Cookbook, recipe(クックブック, レシピ)と⾔ったりする。
  • 40. よく⽿にする Command コマンド名 ⽤途 メモ yum
 (ユム・ヤム) インストールに使う rpm(アールピーエム), apt, apt- get(アプト, エーピーティ) など ⾊々 ソースコードからインストール する場合は、configure(コンフ ィギュア)して、make(メイク) する grep
 (グレップ) ⽂字列検索 nc
 (エヌシー, ネットキャット) ネットワークの疎通確認に使う 相⼿のPortを指定して通信でき るか調べる sudo (スドゥ, スドー) root(ルート) ユーザとして実⾏ する SuperUserDo その他に、AWS 専⽤のコマンド aws-cli などをインストールして使ったりすることもある。 コマンド名が、ちょっと頭おかしい感じなのは、きっと当時作った⼈が疲れてたからに違いない。
  • 41. ギットハブのマスターから開発ブランチ切って、そこで実装してく ださい。コーディング規約はピーエスアールツーで、レビューする の⾯倒なのでコミットする前にピーエイチピーシーエスフィクサー とかでチェックしてください。実装終わったらマスターにたいして プルリク投げてください。レビューしてオッケーならマスターに マージします。 マスターにマージされたらジェンキンスがウェブフックでセレニウ ムをキックして、カレント環境に対してテストするから、それが終 わったらそれも確認してくださいね。 全部問題なかったらステージング環境にアップして、再度テスト。 それも問題なかったらピーオーの承認もらって、プロダクション環 境にデプロイするから、デプロイ完了したら本番にアクセスして ざっとウォークスルーして、チャットワークで報告してください。 練習問題
  • 42. 倉林 寛⾄ - Kurabayashi Hiroshi CIO at LIFULL Tech Vietnam Co.,Ltd., HCMC @kura kura@lifull-tech.vn We are hiring! http://lifull-tech.vn オリジナルとなる英語単語の抑揚をなくし、短⾳を短くせず、⾳節ごとに語尾までハッキリ発⾳すると、⾃然なカタカナ英語になる。