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(ネーム)がひけない
名前解決できない
などと⾔う
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 (ターミナル)などと呼ん
だりするが、⽬に優しく⿊背景に設定する⼈が多い。以前、営業の⼈に「⿊い画⾯を
開いている時は話しかけないようにしている」などと⾔われたことがあり、反省し
た。
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にしておくということが
できる。無駄がない。
タイプ
例
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 さんとだけ
話してください。
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(スケールアップ)と呼びます。
トラフィックを振り分ける
同じ内容のサーバー
普段はないけど、状況に応じ
てどんどん増やす/増える
(スケールアウト)