【AWS】知識ゼロから理解するRDS超入門
AWSのデータベースサービス「Amazon RDS」を初心者にもわかるように解説します。未経験には難しいMultiAZ構成やレプリケーションは、マスター/スレ...
2018-04-05 17:00 2018-10-25 14:05
みやびです(@miyabi_lab)。
連載『知識ゼロからAWS VPCネットワークを構築してセキュアな環境にEC2 Webサーバーを設置・運営する』の第1回です!
このサイト(MIYABI Lab)を製作するにあたり、初めてAmazon Web Service(以下、AWS)にてVPCネットワークを構築して比較的安全性の高いWebサーバーを立ててみましたので、その全学習プロセスと学んだことをまとめます。
この連載記事のゴールは、『無知の状態からAWSネットワークを構築してセキュアなWebサーバーを設置できるようになること』です。
AWSの存在はもちろん知ってはいたのですが、ネットワークやサーバー周りの知識についてはやたら難しそうなイメージを持っておりまして、これまで手をつけられていませんでした。
今回は新しくサイトを立ち上げるという絶好のタイミングだったので、完全に知識ゼロの状態からがっつり勉強して、10日ほどかけて全体的な仕組みを理解して設計および構築を行いました。
連載の第1回は、AWSで作るネットワークと、その要であるIPアドレスとサブネットに焦点を当てて解説していきます。
まず初めに、こちらのネットーワーク図をご覧ください。
現時点ではまだ何も理解できなくて大丈夫です!ひとつずつ順番に解説していくので、この記事を読み終える頃にはネットワークの基礎が理解できるようになるはずなので、安心して読み進めてください。
※Elastic Load Balancer(ELB)の先のAvailability Zone(AZ)の左の分岐先に何もありませんが、その理由も後ほど説明します。
上のネットワーク図は、実際に私たちがこのサイトを運用しているAWS Virtual Private Cloud(VPC)ネットワークの概略図です(一部セキュリティに関わる部分は省略しています)。
この類の図はGoogle画像検索で「AWS ネットワーク」などと検索すれば山ほどヒットしますので、適宜参考にしてみてください。
この記事では、インターネットやAWS、VPCネットワーク、IPアドレスなどに焦点を絞り、これからAWSを設計するために絶対に知っておかなければならない基礎知識について詳しく解説していきます。
そもそもAWSで作るWebサーバーというのは、どのような設計になっているのでしょうか?基本的なフローから順に見ていきます。
この項目では、図のようなAWS VPCネットワークの基本概念を解説します。
新しい単語がいくつか出てきます。以下のようにお好きなイメージで読み進めてください。
AWS
VPC
EC2
Linux
Apache/Nginx
AWSとは、Amazonが提供するクラウドコンピューティングサービスの総称で、仮想サーバーやストレージ、データベース、アプリケーション、機械学習などの様々なソリューションが提供されています。
AWSというとサーバーそのものだと勘違いしている方が多いですが、サーバーは数あるサービスのうちの1つであり、Amazon EC2というサービス名で提供されています。
厳密には、このEC2はAmazonが保有するコンピューティングリソースをレンタルするサービスの名称であり、小さく分割してレンタルされた仮想マシンをEC2インスタンスと呼びます。
このEC2インスタンスにてLinuxなどのOSを導入、起動し、そこにApache(アパッチ)やNginx(エンジンエックス)といったWebサーバーソフトウェアをインストールすることで、初めてWebサーバーとして機能することができます。
(※詳しく知りたい方は、Amazon Machine Image (AMI) で検索してください)
それではこのEC2インスタンスをどう使えばいいのかというと、VPC内に配置した上で起動する必要があります。
VPCとは直訳で仮想プラベートクラウド(ほぼそのままw)で、AWSクラウドの他の仮想ネットワークから論理的に切り離されている、いわば自分だけの自由なプライベート空間です。
もう一度先ほどの図を貼っておきます。
ここまでの説明をまとめると、
となり、実際にアクセスするユーザーは、
という流れになります。
EC2インスタンスにてWebサイトを公開する上で避けて通れないのが、IPアドレスに関する知識です。
IPアドレスについて詳しく書こうとすると、それだけで何記事も書けてしまうほど奥が深いので、ここではVPCネットワークの構築やパブリック(グローバル)IPアドレスについて最低限必要な項目を解説します。
話が脱線しているようにも感じるかと思いますが、ここが理解できていないとネットーワークを構築することは不可能です。
まずはIPアドレスから確認していきましょう。
現実世界でそれぞれの家に住所があるように、インターネット上のコンピューターにも住所が存在します。これこそが俗に言うIPアドレスであり、厳密にはIPアドレスの中でもパブリック(グローバル)IPアドレスと呼ばれるものです。
一方で、VPCなどのプライベート空間内でのみ利用されるIPアドレスは、ローカル(プライベート)IPアドレスと呼びます。
例えば、社内ネットワーク内の各パソコンはローカルIPアドレスで管理されているが、社外からはひとつのパブリックIPアドレス(会社の住所)でのみアクセスできる、といったように使い分けられます。
IPアドレスの実態は、いずれも以下のように32ビットの2進数(0か1)で表されます。
// IPv4の例(32ビット)
00001010000000000000001101010101
// 読みづらいので8ビットずつ区切ります
00001010 00000000 00000011 01010101
8ビットずつ区切っても人間には理解しずらいので、これを10進数に変換します。
// 2進数から10進数に変換してピリオドでつなぎました
10.0.3.85
これで私たちがよく見る形のIPアドレスになりました。
後々、VPCネットワークを設計するのに必要になりますので、2進数の01010101が10進数の85になる仕組みを簡単に解説します。
// 01010101のそれぞれの数値に対して、
// 左から順に2の7乗〜0乗の範囲で以下のように掛け算
0 * 2^7 = 0 * 128 = 0
1 * 2^6 = 1 * 64 = 64
0 * 2^5 = 0 * 32 = 0
1 * 2^4 = 1 * 16 = 16
0 * 2^3 = 0 * 8 = 0
1 * 2^2 = 1 * 4 = 4
0 * 2^1 = 0 * 2 = 0
1 * 2^0 = 1 * 1 = 1
// 計算結果を足し合わせる
0 + 64 + 0 + 16 + 0 + 4 + 0 + 1
-> 合計:85
計算方法は他にもいくつかありますが、暗算が得意なら、なんだかんだでこれが一番早いです。
他の8ビットも同じように計算すると、上の例では10.0.3.85になります。
同じ要領で、
となります。
また新しい単語が出てきましたが、これらはまとめて理解するのがベストです。
サブネットとは、ある1つの大きなネットワークの中をさらに小さく分割した小規模ネットワークのことをいいます。
現実社会でいうと、会社の中に営業本部(メインネットワーク)があり、その組織がさらに〇〇課や△△課(サブネット)に分割されている、といった感じです。
AWSにおけるサブネットの位置付けは、図で示すと以下のようになります。
細かい数値については後々説明しますが、VPC(10.0.0.0 / 16)というネットワーク内を4つのサブネット(10.0.0.0 / 18など)で分割しているのがおわかりいただけるかと思います。
このサブネットごとに、例えば、EC2 Webサーバーを設置する領域、データのバックアップを保管しておく領域、といったように、利用する目的に応じて自由に部屋を分けてあげることができます。
分割された各サブネットは、お互いの関係性を明示的に示さない限り、相互的な干渉が許可されません。
それぞれはサブネットワークとして独立している、ということがイメージできれば十分です。
それでは、このサブネットはどのようにして分割するのでしょうか?この鍵を握るのが「サブネットマスク」という考え方です。
先ほど、IPアドレスは32ビットの2進数などで表現すると説明しましたが、実はその中には区切りがあり、これをサブネットマスクとして以下のように表現します。
// 2進数サブネットマスクの例
11111111 11111111 11111111 00000000
// 10進数サブネットマスクの例
255.255.255.0
// CIDR表記(IPアドレス / xx)
*.*.*.* / 24
区切りじゃないんかい...と言う声が聞こえてきそうですが、これが区切りなんです。
サブネットマスクの書き方には、11111.....や255.255.255.0のようなIPアドレスと同様の書き方と、IPアドレスの後ろにスラッシュを置いてネットワーク部のビット数を書くClassless Inter-Domain Routing(CIDR:サイダー)表記の3種類があります。
(※AWSにおいては、VPCのCIDRブロックとして / 16 から / 28 までが利用できます。)
上の例だと、32ビットのうち上位24ビットが1、残り8ビットが0で構成されており、1の連続と0の連続の境目が区切りになります。
区切り位置について、以前まではクラスA( / 8 )、クラスB( / 16 )、クラスC( / 24)のように区切りが明確に決められていましたが、最近ではCIDR表記が採用されており、区切り位置を状況に応じて自由に調節できるようになっています。
IPアドレスをサブネットで区切ることによって、IPアドレスをネットワーク部とホスト部に分割することができます。
サブネットマスクよって分割されたネットワーク部とホスト部が何を意味しているのかを解説します。
// 10.0.3.85 を 255.255.255.0 で区切る
00001010 00000000 00000011 ~ ~ 01010101
11111111 11111111 11111111 ~ ~ 00000000
上記のように10.0.3.85のIPアドレスを255.255.255.0のサブネットマスクで区切ると、
に分割することができます。
単純計算すると、ネットワーク部は256*256*16 = 1,048,576通り、ホスト部は256通り*になります。
(*実際には、末尾が0と255のものは一般的に予約番号として押さえられているのでホストを割り当てられません。AWSの場合は、末尾が0, 1, 2, 3, 255が使用できません。ここでは計算の簡略化のため予約番号やサブネットワークの計算は無視します。)
これが意味することは、1つのネットワークの中に255個のIPアドレスを自由に割り当てることが可能だと言うことです。
社内ネットワークの例でいうと、もしサブネットを255.255.255.0で区切ったとしたら、1つのローカルネットワーク内に、パソコンやプリンターなど合計256台を接続できるという意味になります。
でもちょっと待ってください。もし社員が3000人の組織でローカルネットワークを作ろうとしたら、社内ネットワークのサブネットマスクは255.255.255.0( = / 24)では足りませんよね。
こうした想定が事前にできる場合には、サブネットマスクは / 24 よりも小さい数値でなくてはなりません。
// サブネットマスクと利用可能なホスト数
...
/16 255.255.0.0 65,536
/17 255.255.128.0 32,768
/18 255.255.192.0 16,384
/19 255.255.224.0 8,192
/20 255.255.240.0 4,096
/21 255.255.248.0 2,048
/22 255.255.252.0 1,024
/23 255.255.254.0 512
/24 255.255.255.0 256
/25 255.255.255.128 128
...
組織が3000人なら、 / 20 であれば充分に割り当てられそうです。
これを2進数で表すと以下の通りになります。
// サブネットマスク(全て同じ)
11111111 11111111 11110000 00000000
255.255.240.0
*.*.*.* / 20
// 240の計算方法は上で紹介した通り
1 * 2^7 = 1 * 128 = 128
1 * 2^6 = 1 * 64 = 64
1 * 2^5 = 1 * 32 = 32
1 * 2^4 = 1 * 16 = 16
0 * 2^3 = 0 * 8 = 0
0 * 2^2 = 0 * 4 = 0
0 * 2^1 = 0 * 2 = 0
0 * 2^0 = 0 * 1 = 0
// 計算結果を足し合わせる
128 + 64 + 32 + 16 + 0 + 0 + 0 + 0
-> 合計:240
途中で分割されていますね。
こちらも単純計算すると、ネットワーク部は256*256*240 = 15,728,640通り、ホスト部は16*256 = 4096通りになります。
ただし、前述したCIDRの導入によって区切りが自由になった一方で、255.255.240.0のような記法では視覚的に綺麗に分割されないケースもあります。
例えば、AWSのVPC(10.0.0.0/16)というプライベート空間の内部をさらに4分割して、4つの独立したサブネットワークを作成したいという場合が出てくることがあります。
図で説明すると以下のような状況です。
この場合、/ 16 で区切っているので、ネットワーク部は256*256= 65,536通り、ホスト部も256*256= 65,536通りになります。
その内部を、ホスト部を2ビット分犠牲にすることで、 / 18 で4分割しているので、ネットワーク部は256*256= 65,536通り、「サブ」ネットワーク部は2*2= 4通り、ホスト部も2^6 * 2^8 = 64*256 = 16,384通りになります。
この時のサブネットマスクは以下のようになります。
// 10.0.0.0 / 16
00001010 00000000 ~ ~ 00000000 00000000 : VPCのネットワークアドレス
11111111 11111111 ~ ~ 00000000 00000000 : VPCのサブネットマスク
// ↓さらに内部を4分割するためのサブネットマスク
// 10.0.0.0 / 18
00001010 00000000 ~ ~ 00 ~ 000000 00000000 : VPC内のサブネットワーク1のネットワークアドレス
00001010 00000000 ~ ~ 01 ~ 000000 00000000 : VPC内のサブネットワーク2のネットワークアドレス
00001010 00000000 ~ ~ 10 ~ 000000 00000000 : VPC内のサブネットワーク3のネットワークアドレス
00001010 00000000 ~ ~ 11 ~ 000000 00000000 : VPC内のサブネットワーク4のネットワークアドレス
11111111 11111111 ~ ~ 11 ~ 000000 00000000 : VPC内のサブネットワークのサブネットマスク
// ↓10進数に変換すると
10.0.0.0 : VPC内のサブネットワーク1のネットワークアドレス
10.0.64.0 : VPC内のサブネットワーク2のネットワークアドレス
10.0.128.0 : VPC内のサブネットワーク3のネットワークアドレス
10.0.192.0 : VPC内のサブネットワーク4のネットワークアドレス
255.255.240.0 : VPC内のサブネットワークのサブネットマスク
// ↓それぞれのIPアドレスの有効範囲
10.0.0.0 ~ 10.0.63.255 : 計16,384ホスト分
10.0.64.0 ~ 10.0.127.255 : 計16,384ホスト分
10.0.128.0 ~ 10.0.191.255 : 計16,384ホスト分
10.0.192.0 ~ 10.0.255.255 : 計16,384ホスト分
ここの理解はかなり難しい部分で、人によっても理解の速度が全然違います。
ただ、じっくりと順を追ってイメージしていけば必ず理解できます。ネットワークの最初の鬼門かもしれませんので、数字に弱い方はめげずに頑張ってください。
IPアドレスとサブネットマスクの論理積(AND演算/掛け算)を求めることで、そのIPアドレスがどのネットワークに属しているかが分かります。実際に計算してみましょう。
この2つのIPアドレスを持ったコンピューターが同じネットワーク内に存在するかどうかを検証します。
サブネットマスクは255.255.255.0です。
// 10.0.3.85のネットワークアドレスを求める
00001010 00000000 00000011 01010101 // 10.0.3.85 IPアドレス
11111111 11111111 11111111 00000000 // 255.255.255.0 サブネットマスク
00001010 00000000 00000011 00000000 // 10.0.3.0 計算結果=ネットワークアドレス
// 10.0.4.86のネットワークアドレスを求める
00001010 00000000 00000100 01010110 // 10.0.4.86 IPアドレス
11111111 11111111 11111111 00000000 // 255.255.255.0 サブネットマスク
00001010 00000000 00000100 00000000 // 10.0.4.0 計算結果=ネットワークアドレス
計算の結果、10.0.3.85のネットワークアドレスは10.0.3.0、10.0.4.86のネットワークアドレスは10.0.4.0となり、これら2つのIPアドレスを持つ機器は異なるネットワークに属していることが分かりました。
この場合、通常では互いに通信を行うことができない状態にあります。
ついでに、一つ前で「VPCネットワーク内を4つのサブネットワークに分割する」方法をご紹介しましたが、そちらの数値も使って検証してみましょう。
先ほどと同様に、この2つのIPアドレスを持ったコンピューターが同じネットワーク内に存在するかどうかを検証します。
// 前回の抜粋 ==========================================================================
// 10.0.0.0 / 18
00001010 00000000 ~ ~ 00 ~ 000000 00000000 : VPC内のサブネットワーク1のネットワークアドレス
00001010 00000000 ~ ~ 01 ~ 000000 00000000 : VPC内のサブネットワーク2のネットワークアドレス
00001010 00000000 ~ ~ 10 ~ 000000 00000000 : VPC内のサブネットワーク3のネットワークアドレス
00001010 00000000 ~ ~ 11 ~ 000000 00000000 : VPC内のサブネットワーク4のネットワークアドレス
11111111 11111111 ~ ~ 11 ~ 000000 00000000 : VPC内のサブネットワークのサブネットマスク
// ↓それぞれのIPアドレスの有効範囲
10.0.0.0 ~ 10.0.63.255 : 計16,384ホスト分
10.0.64.0 ~ 10.0.127.255 : 計16,384ホスト分
10.0.128.0 ~ 10.0.191.255 : 計16,384ホスト分
10.0.192.0 ~ 10.0.255.255 : 計16,384ホスト分
// サブネットマスクを用いた検証 ==========================================================================
// 10.0.127.246のネットワークアドレスを求める
00001010 00000000 01111111 11110110 // 10.0.127.246 IPアドレス
11111111 11111111 11000000 00000000 // 255.255.240.0 サブネットマスク
00001010 00000000 01000000 00000000 // 10.0.64.0 計算結果=ネットワークアドレス
// 10.0.129.135のネットワークアドレスを求める
00001010 00000000 10000001 10000111 // 10.0.129.135 IPアドレス
11111111 11111111 11000000 00000000 // 255.255.240.0 サブネットマスク
00001010 00000000 10000000 00000000 // 10.0.128.0 計算結果=ネットワークアドレス
計算の結果、10.0.127.246のネットワークアドレスは10.0.64.0、10.0.129.135のネットワークアドレスは10.0.128.0となり、これら2つのIPアドレスは当初のネットワーク設計通り、異なるサブネットワークに属していることが分かりました。
余談ですが、このサブネットワークがどこのVPCに属しているかも計算してみます。
// 10.0.64.0のネットワークアドレスを求める
00001010 00000000 01111111 11110110 // 10.0.127.246 IPアドレス
11111111 11111111 00000000 00000000 // 255.255.0.0 サブネットマスク
00001010 00000000 00000000 00000000 // 10.0.0.0 計算結果=ネットワークアドレス
// 10.0.128.0のネットワークアドレスを求める
00001010 00000000 10000001 10000111 // 10.0.129.135 IPアドレス
11111111 11111111 00000000 00000000 // 255.255.255.0 サブネットマスク
00001010 00000000 00000000 00000000 // 10.0.0.0 計算結果=ネットワークアドレス
まぁ計算するまでもなかったですが、最初の設計通り、どちらのサブネットワークも同じVPCネットワーク(10.0.0.0/16)に属していることが確認できました。
お疲れ様でした。知らない状態で読んだ方にとっては非常に重たい内容だったかと思います。
AWSにてVPCネットワークを設計していくと、上で学習したIPアドレスの知識は必須になりますが、ここに書いてあることがイメージできているのであれば、問題なく先に進めます。
もしここで少し躓いてしまったとしても、自分が理解できない部分のキーワードだけをしっかりと書き留めておいて、他の詳しいサイトなども参考にしながら理解を深めていただければと思います。
当初、IPアドレスとは住所のようなものだよ、と最初に説明しました。そこまでは簡単な話でしたね。
でもその住所の市区町村はどこなのか?どこかのマンションの一室なのか?など、ネットワークという大小様々なグルーピングと共に考えていくと、その仕組みと奥深さが実感できたかと思います。
次回はこの知識をフル活用し、VPCやサブネットといったネットワーク環境の構築手順を解説していきます。
また、AWS内で使われる専門用語についてもしっかり解説していきます。
引き続きどうぞよろしくお願いいたします!
Webエンジニア PHPエンジニア HTML CSS JS jQuery PHP Laravel Python SQL WordPress AWS Linux Apache
【名前】 "みやび"
【関連】 株式会社PLAN / MIYABI Lab / JAPAN MENSA /
【MIYABI Lab】平日オフィスを勉強用に解放中!みんなで楽しくプログラミングを学べる環境を作る!詳しくはコチラ(https://miyabi-lab.space)◆HTML, CSS, JS, PHP, Python, SQL, AWS◆生物学系修士→製薬会社→Webエンジニア(株式会社PLAN)・MENSA会員
【AWS】知識ゼロから理解するRDS超入門
AWSのデータベースサービス「Amazon RDS」を初心者にもわかるように解説します。未経験には難しいMultiAZ構成やレプリケーションは、マスター/スレ...
【AWS】Auto Scalingする前に知っておくべき7つのこと
Amazon EC2 Auto Scaling(オートスケール)を使用すると、CPU使用率等に応じてEC2の台数を自動的に増減できます。ここでは、初心者の持つ疑問を通し...
WordPressの基本構造を理解してオリジナルテーマを作ろう(後半)
WordPressのテーマを自作するために必要なテンプレートファイル(functions.phpやstyle.css)の役割やファイル構造を理解して、どのようにオリジナ...
WordPressの基本構造を理解してオリジナルテーマを作ろう(前半)
WordPressのテーマを自作するために必要なテンプレートファイル(functions.phpやfront-page.php)の役割やファイル構造を理解して、どのようにオ...
【Heroku入門】無料枠サーバーを24時間スリープさせない方法
フリープランのHerokuサーバーでは、30分以上アクセスがないと自動的にスリープしてしまいます。ここでは、Herokuサーバーを寝かせない方法につい...
【入門編】Laravelのディレクトリ構造とMVCの処理の流れを理解する
Laravel初心者が学習する際にわかりにくいLaravelのディレクトリ構造を具体的な例を交えて解説します。MVCの基本であるビュー、モデル、コントロー...
【初心者向け】PythonによるHeroku環境で簡単LINEBot開発
誰でも簡単にLINEBotをpythonを使ってHeroku環境で開発できる方法を解説します。ここでは、LINE Messaging APIを用いることでおうむ返しをするBot...
AWSでWebサーバー構築!踏み台サーバーでセキュアなネットワークを構築する(第5回)
連載の第5回です。メインEC2に対して直接SSH接続できる状態というのは、セキュリティの観点からあまり望ましくありません。MySQLやEBSが紐づいたメ...
AnacondaでのTensorFlow環境構築と基礎的な使い方
Anaconda(アナコンダ)のインストールからJupyter notebook(ジュピターノートブック)とTensorFlow(テンサーフロー)の基本的な使い方を初心者...
脱初心者!MNIST beginnerに隠れ層を加えたニューラルネット解説
TensorFlowのチュートリアルであるMNIST beginnerの応用して、隠れ層と活性化関数を加えたニューラルネットワークで手書き文字識別を解説します。...
AWSでWebサーバー構築!Apache2.4, PHP7, MySQLの導入と初期設定(第4回)
連載の第4回です。今回は作成したEC2インスタンスにWebサーバーとしての機能を持たせるため、Apache2.4のインストールおよびhttpd.conf等の各種設...
AWSでWebサーバー構築!EC2を作成してSSH接続する(第3回)
連載の第3回です。前回作成したVPC・サブネットにおいて、セキュリティーグループに保護されたEC2インスタンスの作成・設定およびSSH接続の確立ま...
初心者必読!MNIST実行環境の準備から手書き文字識別までを徹底解説!
Pythonによる機械学習をプログラミング初心者にもわかりやすいように、TensorFlowチュートリアルのMNIST beginnerを使って、手書き文字(MNIST)識別...
AWSでWebサーバー構築!専門用語の解説とVPC環境を構築する手順(第2回)
連載の第2回です。AWSにてVPCネットワークを構築してWebサーバーを設置・運用するためには、AWS内で利用される重要単語について正しく理解しておく...
知識ゼロで機械学習・AIを理解するために必要なニューラルネットワークの基礎知識
機械学習・AIを理解するために必要なニューラルネットワークの基礎について、これから機械学習を勉強したい人、プログラミング未経験の人にもわか...
Canvaで簡単におしゃれなアイキャッチ画像を作ろう!使い方を徹底解説!
PhotoshopやIllustratorを使えなくてもCanvaなら誰でも簡単におしゃれなアイキャッチ画像が作れます。豊富なデザインテンプレートを組み合わせるだ...
プレビュー機能付きの記事編集画面の作り方(Laravel5)
記事編集フォームにはプレビュー機能の実装が必須です。記事を保存する処理とプレビューを表示する処理を共存させるにあたり、ボタンをクリックし...
AWSでWebサーバー構築!VPC設計に必要なIPアドレスとサブネットの基礎知識(第1回)
連載の第1回です。AWSのVPCネットワークを設計して実際に構築するためには、IPアドレスの基礎を理解することが非常に大切です。EC2 Webサーバーを...
MIYABI Labホームページを製作しました
様々な理由でプログラミングの勉強を困難だと感じてしまっている方のお役に立てれば嬉しいです。これからも小さなWebサービスを作り続けていき、技...
ゆざ、株式会社PLANを卒業します。
2年間インターンとしてお世話になった株式会社PLANを卒業します。AWS,Laravel,Pythonなどの技術的なことだけではなく、エンジニアとして、社会人と...