Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ブラウザのフタを開けてHTTP体験しよう 20240608v1.0.0

ブラウザのフタを開けてHTTP体験しよう 20240608v1.0.0

ITインフラ初心者向けLPI Webinar “ブラウザのフタを開けてHTTP体験しよう”(2024-06-08開催)という動画( https://youtu.be/y84Asag9O1o )のスライド(完全版,v1.0.0)です。

公立千歳科学技術大学 情報システム工学科3年生の「実務を全力でやるITインフラストラクチャ演習群」からの抜粋になっています。

Bパートのハンズオン(動画8:45-51:35,スライドp.10-48)が演習の本編です。でも、つづくCパートのキャリア形成についてのコラム(動画51:35-,スライドp.50-)も同じくらい本気です。いや、むしろCパートがメインか?Cパートは(ITインフラに限らず)エンジニア全般および学生向けのつもり

この動画は自習教材兼模擬演習として作られています。自習の場合、演習環境は付録Bを参考に構築してください。テキストやワークシートは次のURLからダウンロードしてください。https://lpic-2024q2.demo.fml.org/

Ken'ichi Fukamachi

June 13, 2024
Tweet

More Decks by Ken'ichi Fukamachi

Other Decks in Education

Transcript

  1. Copyright (C) 2021-2024 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA

    4.0. We appreciate AWS Academy Japan for the offer of the learning environment. ふだん使っている道具は便利だけれど なんかモヤモヤしませんか?
  2. あなたは10年後なにをしていたいですか? どうせなら好きなことで食べていきたいよね? 就職はゴールではありません。けれども、 でき ることなら長く技術の仕事をして食べたいよね? 10年後、20年後、… 50年後 キャリアの例 1. 特定の(せまい)分野を極める

    2. プロジェクトを技術監修する (上から下ま で、ひととおり分かる) ITアーキテクトなど と呼ばれる立場 現実には、非常に得意な分野と、そうで ない分野の濃淡があるでしょう。 真のオ ールラウンダーなど滅多にいません 得意分野としてITインフラはいかが? ではHTTPの裏側の体験へ進みましょう (脚注1) いつも授業はココから (脚注2) 異論は、あるでしょう:-) なお、肩書きは業界や会社によって異なるので気をつけてください 5/78
  3. 本動画の構成 1. はじめに (イントロ、本動画について等,5分程度, Aパート) *今ここの途中 2. ハンズオン (30-35分程度, Bパート)

    動作原理がよくわかる例題を一緒にいくつかやってみましょう 3. おわりに (キャリア的な話 後編,5分強, Cパート) 4. 質問コーナー 5. 付録 (紹介のみ, スライドの最後の10枚ほど) 8/78
  4. [経歴] フリーソフトウエア, >30年, >20万行? github 本来の専門は理論物理学です が、インターネットの方が楽 しい(業界あるあるですね?) 東京工業大学 ->

    IIJ(日本初ISP) -> (私立)千歳科学技術大学 -> 公立千歳科学技術大学 環境: NetBSD, Debian, Chromebook 写真(上) 学食からの風景: ほぼ滑走路端 のレストラン。 写真(下) 左端が大学、 工場(EPSON)の上に建設中の半導体工場 (Rapidus)工事のクレーンが見えてます 地図(中央上あたりが大学,左が新千歳空 港,右中でRapidusの半導体工場建設中) 自己紹介: このあたりからやってきました [余談]推しのアニメ製作会社は富山県のP.A.Worksです:-) ; 図(右)(C) OpenStreeMap, available under the Open Database License. 9/78
  5. 演習環境の準備と確認 受講者の大前提 (注意: ここを事前講習会で確認します) PC: 安定したインターネット接続環境のあるPCを用意できる OS: sshコマンドだけは利用できる 演習環境にsshでリモートログインして演習を行います この動画専用の演習環境を用意しました

    事前にユーザ名とパスワード、サーバ名を配布します。 この情報で演習環境にsshでログインしてください。 うまくいか ない場合は、 別資料「Windowsでsshコマンドが使えるか?その確認と対処方法」 (PDF) (slides) を参照してください。そ れでもダメな場合は事前講習会(相談会)へ参加を ターミナルを2つ開き、それぞれでsshログインしてください。サーバ用と動作体験用です [注]パスワードを入力しても無反応なのがUnixの仕様です。(ブラウザのような)"黒い点"は表示されません [実行例] 割り当てられたユーザ名が user99 の場合に実行するsshコマンド (Windows Terminal) PS \Users\Your-Username> ssh [email protected] (脚注1) このページ以降は、演習環境にログインできている想定となります 11/78
  6. 基本用語(事前講習) Unixオペレーティングシステム (発音:ゆにっくす) 世間では「黒い画面にコマンドを打ちこむ謎の黒魔術」的な何かと思われていそうです;-) このテキストではDebian GNU/Linuxのことです (初心者は50年以上にわたるUNIX開発の複雑な系統図なぞ気にしなくてOK) IPアドレス (発音:あいぴーあどれす) コンピュータを識別するための数字で172.18.0.4のように10進数4つの組で表記したもの

    本演習では意識しなくても作業できます。ただし演習の中でIPアドレスが表示されることがあります ドメイン名 ドット( . )でつないだ文字列で組織名やサーバ名などに使われるもの サーバ名のwww.user99.demo.fml.orgやURLのhttp://www.user99.demo.fml.org/ (脚注) よく分からなくても演習には差しつかえありません 12/78
  7. 基本用語(事前講習) WWW (World Wide Web略してW3やWeb, 1989-) 発音は「わーるどわいどうえぶ」もしくは「だぶりゅーすりー」らしい、あとは略して「うえぶ」 一般人がイメージするインターネットのこと(1993/09以降); (インフラエンジニア目線では)空前のヒットを飛ばしたアプリケーションのひとつ WWW

    = コンテンツ(HTMLなど) + 転送システム(HTTP) HTML (発音:えいちてぃーえむえる) index.html などのハイパーテキストというコンテンツを記述する言語 適当に書いてもブラウザが何とかしてくれる(ので動作確認なら正確さは気にしなくてOK:-) HTTP (発音:えいちてぃーてぃーぴー) WWWのコンテンツ転送時の約束事(プロトコル)の名称 [参考] 1993年、WWWブラウザ NCSA Mosaicは世界に色を灯したのです 13/78
  8. 登場するコマンドたち(事前講習) コマンド コンピュータに与える命令で擬似英語っぽい単語もしくは文章、スペース区切りに注意 ssh リモートのコンピュータにログインするためのコマンド(発音:えすえすえいち) curl ダウンロードやブラウザの代わりが出来る便利なコマンド(発音:しーゆーあーるえる or かーる) HTTPを話すことが出来る

    sudo 引数を管理者権限で実行できる特殊なコマンド(発音:えすゆーどぅー or すどう(日本人限定?))。 管理権限が必要な作業の時に使う。 Linuxのシステム構築で頻出するコマンド python3 プログラミング言語Python(発音:ぱいそん)のプログラムを実行するコマンド(インタープリタ) telnet 本来はリモートのコンピュータにログインするコマンド (発音:てるねっと) 本演習ではWWWサーバへの(TCP)接続に使用 (脚注) もともとUnixにsu(えすゆー)コマンドがあって、 のちにsudo登場なので、すなおに「えすゆーどぅー」な気がするんですけどね 14/78
  9. [凡例] Unixマニュアルorドキュメントの読み方(事前講習) [コマンドの記述例] $ sudo python3 www.py 左端の $ をプロンプトと呼んでいます。OSが「入力まち」を意思表示していると考えてください

    プロンプト $ 部分はOSやユーザごとに異なるので、あくまでも一例です 通常、左端にある特殊文字部分は、プロンプトとして無視してください(そのうち慣れます) 英語なので空白区切りです。初心者は日本語のつもりか連続して文字を打ちこみがちなので注意 ユーザが打ちこむ部分は sudo python3 www.py です。そしてENTERキーを押します 通常マニュアルにENTERキーは書きませんので、ユーザが頭の中で補完してください 雑誌や書籍では、組版(くみはん)の際にデザイナさんがENTER印を書きこんでくれているのです 上の例では、sudoが実行するコマンド、sudoコマンドの引数がpython3 www.pyです 15/78
  10. おしながき 1. (演習環境にsshでログインする、2つのターミナルで二重にsshしてください) 2. ホームページを作ろう [例題] WWWサーバを起動し、ホームページがブラウザで見えることを確認しよう 3. ホームページの動作の裏側を見てみよう [例題]

    curlコマンドでHTTPをしてみよう [例題] telnetコマンドで手動HTTPしてみよう 4. WWWサーバと会話しよう(HTMLで値をWWWサーバに送ろう) [例題] ジャンケンWeb APIサーバとジャンケンしよう [例題] ジャンケンWeb APIサーバとtelnetで(手動)ジャンケンしよう 5. 構成図を書いてみよう 6. [自由課題] (出題のみ) (脚注) このページで気になるキーワードを一つ見つけましょう(5秒待つ)。 思いつかないなら、どこ?を気にしてみましょう 17/78
  11. [凡例] テキストの書き方(事前講習兼もういちど) ユーザ名について … sshする際のユーザと演習環境のユーザは異なります (sshする際のユーザ名はuser01などとなっていて、各自ことなりますが) 演習環境へログインすると、ユーザはadmin、ホームディレクトリ(フォルダ)は/home/adminです (授業ではAWS Academyを用いてEC2を作成し、その上で作業しています) 本テキストも他の授業資料とあわせるため、AWS提供のDebianのデフォルト値に合わせてあります

    困った時はCtrl-C。たとえばwww.pyの止め方もCtrl-Cです(書いてないけど) Ctrl-Cは「CtrlとCのキーを同時に押す」操作で、実行中のコマンドを途中で止める時の定番 本動画特有の注意点 この動画では、実際に手を動かしている想定のところに「(アーカイブ動画で見ている人は)一時停止 して手を動かしてみましょう」 というスライドが挿入されています。 アーカイブで見ている方は、 動画を一時停止して、手を動かしてから、再生をリスタートしてください 演習時間を30分程度におさえるため、ダウンロードとコピー&ペーストのみにしてあります。 もう少し時間のかかるものは、付録に「自由課題」として収録してあるので、 各自で取り組んでみて ください。ちなみに、自由課題の難易度は「やさしい」から「むずかしい」まで色々です (脚注1) 自由課題は出題のみです。 いまのところ自由課題の解答編の動画を作る予定はありませんが、リクエスト数しだい? (脚注2)AWS Academyについては付録 Eを参照 18/78
  12. [凡例] www.pyの止め方 [実行例] admin@user99:~$ sudo python3 www.py /home/admin/www.py:26: DeprecationWarning: 'cgi'

    is deprecated ... (<-警告文)略 ... (debug) serving at port 80 ... (止めたいときは、ターミナルにCtrl-Cを打ちこむ) ... ^CTraceback (most recent call last): File "/home/admin/www.py", line 200, in <module> httpd.serve_forever() File "/usr/lib/python3.7/socketserver.py", line 232, in serve_forever ready = selector.select(poll_interval) File "/usr/lib/python3.7/selectors.py", line 415, in select fd_event_list = self._selector.poll(timeout) KeyboardInterrupt admin@user99:~$ 19/78
  13. [解説] ホームページ(WWW)のしくみ URL(http://www.user99.demo.fml.org/)をブラウザでク リックすると 1. WWWサーバ www.user99.demo.fml.org (www.pyを 動かしているサーバ)にリクエストを送ります 2.

    サーバ内部では、URL右端の / を /index.html と解 釈して、中身(コンテンツ)を取り出し 3. サーバはブラウザにコンテンツを送り返します 4. ブラウザがコンテンツ(HTMLなど)を解釈した結 果を表示します(レンダリング) (脚注) これを「サーバ(給仕)・クライアント(お客様)モデル」と呼んでいます 21/78
  14. [解説] URLの読み方 [例] URL http://www.user99.demo.fml.org/ URL = プロトコル:// + サーバ名

    + 見たいコンテンツ サーバ名が www.user99.demo.fml.org サーバ名より右側の部分(ここでは/)がサーバ上 でのコンテンツの場所の指定(Unix用語のパス) 注: /=/index.htmlは相対位置です。 WWWサ ーバ(www.py)には、あらかじめ /index.html の実在位置を/home/admin/htdocs/index.htmlと 解釈する設定が入っています (脚注) Unix用語では/home/admin/htdocs/index.htmlを絶対パス(Absolute Path)と呼びます。反対語が相対パス(Relative Path) 22/78
  15. [例題] ホームページを作ろう(2): ダウンロード 各自の演習環境で、curlコマンドを利用し、次のPythonスクリプト(www.py)をダウンロ ードしてください 実行するコマンド 具体的には curl -O https://lpic-2024q2.demo.fml.org/dist/www.py

    -O は「マイナス」「大文字のオー」(OscarのO) [コマンド] $ curl -O https://lpic-2024q2.demo.fml.org/dist/www.py [実行例] admin@user99:~$ curl -O https://lpic-2024q2.demo.fml.org/dist/www.py % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2933 100 2933 0 0 3230 0 --:--:-- --:--:-- --:--:-- 3226 (脚注) あとで curl の -o (小文字のオー)オプションも出てきます。 -O (大文字)は-o www.py (URLの右端にあるファイル名)の省略形 24/78
  16. [例題] ホームページを作ろう(3): WWWサーバの起動 WWWサーバを起動するには sudo python3 www.py コマンドを実行してください [コマンド] $

    sudo python3 www.py [実行例] admin@user99:~$ sudo python3 www.py /home/admin/www.py:26: DeprecationWarning: 'cgi' is deprecated ... (<-警告文)略 ... (debug) serving at port 80 デバッグメッセージ(debug) serving at port 80が表示されれば無事に起動しています これは「WWWサーバが 80/tcp (TCPポートの80番)で待ち受けを始めました」という意味です この演習はTCPなどの知識編を飛ばしているので、ここでは、そういうものだと思ってください (脚注) www.pyには、さまざまな仕込みが入っていて、 初回起動時には自動的に簡単なホームページ(コンテンツ)を作成します 26/78
  17. [例題] ホームページを作ろう(4): 動作確認 Welcome to my homepage 各自、手元のPCのブラウザでURL( http://www.ユーザ名.demo.fml.org/ )にアクセスしてください

    上のように無事に表示されましたか? URLの ユーザ名 の部分を各自あたえられたID(例: user01)に差し替えてください 例: user01 の人はURL( http://www.user01.demo.fml.org/ )にアクセス [解説] www.pyの初回起動時に /home/admin/htdocs/index.html というファイル(ホームページのコンテンツ) を自動作成します。 Welcome to my homepage というコンテンツは、このindex.htmlの中身です 気になる人は、あとで、このファイルをエディタ等で開いて見てください (脚注) 30年前の商用インターネット黎明期には、みんな、これだけで大喜びできたものです。 なにもかもみな懐かしい... 28/78
  18. [例題] curlコマンドでHTTPをしてみよう ブラウザが裏側で行っているデータ転送をコマンドで行ってみましょう $ curl http://www.user99.demo.fml.org/ Welcome to my homepage

    [解説] システム構築の際には、少し作業をしたら、こういった確認をして、少しずつ進めるべきなのです curlコマンドを使うとWWサーバの動作確認も簡単ですよね? システム構築の際の動作確認では、ブ ラウザではなく、こういったコマンドを使うと便利です。 ブラウザより圧倒的に軽いですから。 それに構築時の環境で、うまくブラウザを起動できるとは限りません 31/78
  19. [例題] telnetコマンドで手動HTTPしてみよう(1) ブラウザが裏でやっていることを実感するために、 生々しくHTTPを手動でやってみましょう 一緒にやります。字面だとタイミングがよくわからないでしょうから 手順 1. まずtelnetコマンド「telnet 空白 サーバ名

    空白 80」でサーバへ接続し、TCPの通信路を作ります。 $ telnet www.user99.demo.fml.org 80 サーバ名は各自ことなります。 右端の80がWWW(というサービス)を意味しています 2. ここで次の1行をコピー&ペーストし、ENTERを2回たたいてください(ここがHTTP) GET / HTTP/1.0 (脚注1) サーバの動作確認をする際に年中やります。 いままでに何百回やったことがあるかと... 32/78
  20. [解説] telnetコマンドで手動HTTPするイメージ 「流しそうめん」に例えるなら (デジタル)「竹づつ」を用意するのが第一段階の 「telnet サーバ 80」の実行で、 「そうめんが欲しい(流してください)」とリクエ ストするのが第2段階「GET /

    HTTP/1.0」に相当 します(いわばGET SOMEN?) リクエストの返事として、竹の上を流れてく る物がコンテンツ(そうめん) コンテンツのやりとりの約束事がプロトコル (この例では HTTP) (脚注) 竹づつの上でSSHプロトコルを使う約束も可能で、それがsshというアプリケーションです 33/78
  21. [例題] telnetコマンドで手動HTTPしてみよう(2): 実行例 [実行例] $ telnet www.user99.demo.fml.org 80 Trying 10.20.30.40...

    Connected to 10.20.30.40. Escape character is '^]'. GET / HTTP/1.0 HTTP/1.0 200 OK Server: SimpleHTTP/0.6 Python/3.7.3 Date: Thu, 29 Feb 2024 23:02:03 GMT Content-type: text/html Content-Length: 23 Last-Modified: Thu, 29 Feb 2024 23:01:46 GMT welcome to my homepage Connection closed by foreign host. 34/78
  22. [解説]ジャンケンの仕様 コンピュータの中は数字で動いています。得意なのは数字だけとも言えます 逆に、数字で表現してあげれば、コンピュータは何でも出来ます ジャンケンを次のように定義してあげることでコンピュータとジャンケンが出来ます グー = 0、チョキ = 1、パー =

    2 勝ち負け判定は「3 + 自分の手 - 相手(コンピュータ)の手を計算し、それを3で割った余り」 あいこ = 0、(自分の)負け = 1、(自分の)勝ち = 2 (脚注1) 仕様の紹介だけします。確かに、これでジャンケンになっていることを確認してみてください (脚注2) 本ウエビナーではコーディングをしないので紹介だけですが、自由課題では必要な知識です 37/78
  23. [解説]WWWサーバと会話する(値をWWWサーバに送る)(1) (1) URLで表示される入力欄(図の右上端を参照)に 値を入れ、クリックすると、 自分の手(0か1か2) がサーバ(注:api.fml.org)に送られます (2) サーバで動いている”じゃんけんWeb APIサー バ”が、じゃんけんを行い

    (3) WWWサーバ(api.fml.org)がWWWブラウザ に答えを返します URL = http://www.user99.demo.fml.org/janken.html (脚注) 自分のPC、www.pyを動かしているサーバ、api.fml.orgという別のWWWサーバが登場しています。 区別がついていますか? 38/78
  24. [解説]WWWサーバと会話する(値をWWWサーバに送る)(2) 注意:janken.htmlにはform文というHTMLが書いて あります(次頁を参照)。 form文にあるactionには ジャンケン(Web API)サーバのURLを設定します が、 ここにapi.fml.org(www.pyとは違うサーバ) 名を指定します(ポイント) actionのURL右側(

    /api/janken/v1 )はコンテン ツの場所ではなく”じゃんけんWeb APIサー バ”の呼び出しと解釈されます(そのように WWWサーバを作っているのです) <form ... action="http://api.fml.org/api/janken/v1"> (脚注) 自分のPC、www.pyを動かしているサーバ、api.fml.orgという別のWWWサーバが登場しています。 区別がついていますか? 39/78
  25. [解説]janken.htmlのform文(HTMLで値をWWWサーバに送る) <form method="POST" action="http://api.fml.org/api/janken/v1"> <input name="jibun" type="text"/> <input type="submit" value="jankenpon">

    </form> このあとダウンロードするjanken.htmlの解説です ブラウザには、この命令( <form> や <input> など)を解釈して画面を作る機能があります <input name="jibun" type="text"/> により入力欄が作成され、   <input type="submit" value="jankenpon"> によ り「jankenpon」のクリックボタンが作成されます。 そして 「jankenpon」をクリックすると(入力欄に入 力された)値を(actionで指定した)サーバへ送信する機能もブラウザにあります 値を送信する先は action=URL で指定するURLです (脚注) 時間があればやりましょう。時間がなさそうなら飛ばします 40/78
  26. [例題] WWWサーバとジャンケンしてみよう(1) 手順 作業手順は次のとおりです 1. www.pyとは別のターミナルで作業します。ターミナルその2に移動してください 2. curlコマンドでjanken.htmlをダウンロードします 具体的には/home/admin/htdocs/以下にjanken.htmlをダウンロードします 3.

    ブラウザでアクセスし、ジャンケンの手を入れ、「jankenpon」をクリック アクセス先は、user99の人は http://www.user99.demo.fml.org/janken.html 注: user99の部分は各自ことなります。与えられたIDと差し替えてください ジャンケンは手を数字で入力してください。仕様: 0 = ぐー、1 = ちょき、 2 = ぱー (脚注1) Ctrl-Cは「CtrlとCのキーを同時に押す」操作です。 実行中のコマンドを途中で止める時の定番 (脚注2) 本演習はwww.pyを編集 しないので、 Ctrl-Cで止めなくてもよいのですが、バックグラウンド処理など別の解説が増えるので、単純な方を選択しています 41/78
  27. [例題] WWWサーバとジャンケンしてみよう(2) ダウンロード [コマンド] $ curl -o htdocs/janken.html https://lpic-2024q2.demo.fml.org/dist/janken.html [実行例]

    $ curl -o htdocs/janken.html https://lpic-2024q2.demo.fml.org/dist/janken.html % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2933 100 2933 0 0 3230 0 --:--:-- --:--:-- --:--:-- 3226 -o は「マイナス」「小文字のオー(OscarのO)」です。引数でファイル名を指定できるオプションです sshでログインすると/home/adminという場所にいます。 curlコマンドを-o htdocs/janken.htmlオプションつ きで実行すれば、 /home/admin/htdocs/janken.htmlにファイルを直接ダウンロードできます (脚注) 階層構造が希薄なスマートフォンとかWindowsのせいなのか、 引数に/(スラッシュ)が含まれると、とたんに分からなくなる人が 多いようです。 冷静に文字列の足し算をして考えてみてください。 慣れるには場数しかないです 42/78
  28. [例題] WWWサーバとジャンケンしてみよう(3) 動作確認 1. URLにアクセスし(注:user99の部分は差し替え) 2. 入力欄に 0 (グー)か 1

    (チョキ)か 2 (パー)を入力 3. 「jankenpon」をクリックすると 4. 右図(下)のような結果(JSON形式)が帰ります jibun:0 が自分の手 aite:2 はコンピュータ(相手)が考えた手 kekka:1 はジャンケンの勝敗です 0(あいこ)、1(自分の負け)、2(自分の勝ち) URL = http://www.user99.demo.fml.org/janken.html (脚注) JSON形式とはJavascriptで使われるデータ形式で、見かけはPythonのdictと同じです。 { KEY1:VALUE1, KEY2:VALUE2, ... } 返事がJSON形式になっている理由は、これを利用したWeb API開発をする自由課題のための仕こみだからです 43/78
  29. [例題] ジャンケンWeb APIサーバにtelnetしてジャンケンしよう 前頁のform文の「jankenpon」をクリックした際にブラウザが裏で行う動作を実感しましょう api.fml.orgに接続し、 $ telnet api.fml.org 80 以下の呪文をコピー&ペーストしてみましょう

    POST /api/janken/v1 HTTP/1.0 Host: api.fml.org Content-Length: 7 jibun=0 (脚注) ブラウザがform文を解釈して、送信する内容が、このコピー&ペーストする文字列です。 意外と簡単ですよね? 45/78
  30. [例題] 構成図を書いてみよう Q: 配布する構成図テンプレートの、どこに何が当て はまるか考えてみてください 図の右下にある用語群を書き入れてください。 てきぎ機材や矢印の増減もしてください。 な お、図を描くツールは自由です(手書きでもOK) 図のテンプレートはこちらから

    簡単な答えあわせをイベントの最後に行います (長い版は別動画を用意するので、そちらを参照) すこし時間が必要でしょう。 このあと、少しキャリア 形成関連のコラムのような話が続きます。 それを聞き ながらでよいので考えてみてください (脚注) 最後は、本演習の総復習をかねた構成図を書く演習です。 あんがい、どこでどう動いているか混乱していませんか? 48/78
  31. Q: クラウドサービスの脅威と厳しい現実とは? 大手のクラウドサービスは世界中どこで誰が使おうと同じです だから使い方が分かるだけでは差別化になりません クラウドだけでなく「流行の技術」は、もっと多数のライバルがいるでしょう 自分のウリは何か? つまり自分の価値を差別化するには? (悲しいかな、興味を持ってくれる人が少ないため)ITインフラが分かると、とても重宝されます そこで、ITインフラに詳しくなってみませんか?(逆張りの勧誘:-) (脚注1)

    プログラミング言語は世界共通ですし、ITインフラは管理画面の言語が違うだけです。 同じスキルのライバル同士なら低価格の 人が受注できます。 いままでは 日本の企業文化や日本語の壁でライバルが参入しづらかった面がありましたが、これからは? (脚注2) 流行の技術や資格は就職に役立つとは思います。でも10年後も食べていけると思いますか? (脚注3) ITインフラ産業は不況に強いし、不滅です。 いまや24時間動いていて当たり前のインフラになったし、 24時間動かしつづける 使命感で、この産業をやっている人も多いでしょう。 ただ(dog yearと言われるように約7倍速で)移り変わる技術を追う努力は必要で す。 今なら「プログラマブルなITインフラが分かること」でしょうか? 「Ciscoのシリアルから直接設定が大好き」では、もうダメ;) 53/78
  32. Q: 論理的能力よりコミュ力ではないのですか? もちろん、コミュニケーション力がとても大事な職種(例:営業)もあるでしょう しかしながら、商談の発掘のために、お客様と技術部が会う必要はないはずです お客様の話を論理的に分解・再構成して整理・提案できるのが技術のプロでしょう お客様の曖昧な話から、本当にやりたいことを推測して、 それを論理的に再構成・整理・提案できる のがプロであろうと思うわけです (それができないなら、わざわざ専門家を呼ぶ理由がない) 本ウエビナーの題材を例にとれば、

    お客様は「ホームページを立てたい」と言えばよいだけなので す。 そこからプロジェクト一式を仕切れるのがマネージャでしょうが、 まずは「WWWサーバを構 築」と言われたときに、おまかな手順書を、すぐに書けるくらいを目指しましょう (3年?) (脚注) ITインフラって、しゅくしゅくと地道な作業が好きな人に、とても向いていると思っています。 もっとも引きこもりではダメで すが... お客様と対面で1,2回ミーティングするくらいは我慢しましょう:-) 54/78
  33. ヒマがあれば手を動かす 努力は、それなりに酬われると思います 努力すればIT業界のサリエリには、なれるかもです 芸術系(?)とは違いますから… (サリエリ100人あつめても、モーツァルトは育たないですよね?) やっぱり場数なんですよ 「練習で出来ないことは、本番では絶対に出来ません」 手を動かすなら、OSのパッケージを増減して遊ぶより、 ソースからコンパイルするとか、 OSのカス

    タマイズ(例:1.4MBのLinux作るとか(OSの実務的な動作原理の理解が必要なこと))に挑戦したい (脚注1) 1.4MBはフロッピーのサイズ (脚注2) OSの動作原理というとカーネルの話と思われそうなので「実務的な動作原理の理解」と書 いています。 必要な知識は、カーネルの作り(例: スケジューラや仮想記憶)ではなく、 Unixユーザランドを管理しているプログラム群 とは? どれが必須なプログラムなのか? どのように起動してくるのか? などです。 これらが分からないとOSを削っていくことが出来 ません。 カーネル自体も削りますが、基本的にデバイスを削るだけなので、OSの授業でやるような内容は分からなくてもOKです (脚注3)映画「アマデウス(1984)」 (脚注4)「はちみつとクローバー」の方が良い例?天然物の天才はぐちゃんは次元が違うでしょ? 56/78
  34. 歴史の勉強と、技術を先読みできるためには? (即効性はありませんが)目利きとか先読みには大事なところではないかと 歴史は繰り返しませんが、似たようなところには返ってきます(スパイラル?) 世界は非合理だし目的論でもない。 出来事や英雄の歴史ではなく、 その背後にある技術開発をドラ イブした観念や妄想や偶然や非合理なものの理解が重要と思うのです まとまった資料は?と言われても?… ないから自分でちまちま語ってます シリーズ「色づかないWorld-Wide-Webの昨日から」

    (qiita版は、かなり薄味です) 濃い方はコチラ -> フリーソフトウエア運動の40年 (序章部分) (第1章) (脚注1) スパイラル感といえば、 商用インターネット初期より今の方がメインフレーム時代に戻ってきた感がありませんか? (脚注2) 商用インターネットがメジャーになったあと(1996あたり以降)に書かれた(人文科学系の視点からの)書籍、 出来事史、細部がア テにならない回想録とかは、それなりにありますが、なんか違うような... 58/78
  35. 妄想(Vision?)は世界を変えたか?YES!たとえば Vannevar Bush Douglas Engelbart Stewart Brand Steve Jobs (脚注)

    申し訳ないけれど、ネタをふるだけふって終わりです。 たぶん1Q(7-8週)くらい授業しないと話おわりません 余談ですが、来月(2024/07)の 色づかないWorld-Wide-Webの昨日からは、 V.Bushを予定しています 59/78
  36. 付録 一覧 A. 自由課題 B. 自由課題を行う演習環境の作り方 C. リファレンス 本イベントの配布物サイトや元ネタへのリンク D.

    本コンテンツを利用したい方々への御提案 E. AWS Academyの御紹介 F. 構成図の答え(簡易版) 64/78
  37. 付録A. 自由課題 100番台 … やさしい 500番台 … 若干むずかしい 900番台 …

    かなりむずかしい(学部4年ないし大学院レベル) (脚注) 自由課題、ひと月ほど時間をあげるので考えて見てください。 解答編の動画を作るかは、リクエスト数しだい? 65/78
  38. 自由課題(1): やさしい 問110: index.htmlを編集し、もっと素敵なホームページを作成してください 例: ホームページを Welcome to 自分の名前 にしてみましょう

    例: もっとリッチなホームページにしてみましょう。やりかたは検索すると色々みつかります 問120: ISBNで書誌情報を検索できるページを作成してください janken.htmlを参考にisbn.htmlを作成するとよいでしょう 使うサービスはopenbd.jp。 openbd.jpには説明がありませんがPOSTメソッドでも検索可能です 66/78
  39. 自由課題(2): 若干むずかしい 問510: www.pyを改造してジャンケンWeb API機能を実装してください 動作確認は、janken.htmlを編集してactionのURLを自分のwww.pyを動かしているサーバに向けます。 これで、ジャンケンができるか?を確認します。 www.pyのログに自分がアクセスした様子が出るこ とを確認してください。 www.pyの中に

    janken メソッドの雛形があるので、そこに実装します。 /api/janken/v1 の場合に janken メソッドを呼び出すルーティングは、 lsformメソッドを参考にしてみてください 問520: 演習で体験した初期のHTTPの仕組みでは、ソフトウエアの配布は出来ても、 商用ショッピングサ イトは作れません。 そのために、どのような技術が開発されてきたのか?を調べてみましょう。 具体的には ログインなどの「状態のあるシステム」を、どう実現すればよいでしょうか? 個人情報やクレジットカードを送信する際には暗号化してほしいですよね? (脚注1) 問510は数行のPythonプログラミングです。 この方向の課題は色々かんがえられますが、 HTTPの裏側を知るというテーマから逸 脱していってしまうので1題だけ入れておきました (脚注2) ハンズオンでは30年前のインターネットを体験しました。その後HTTPには 様々な改良が加えられています。 問520は、その後の30年の歴史の概略を問う課題です 67/78
  40. 自由課題(3): 若干むずかしい 問530: 演習では手間を省くために自作のwww.pyを使っていますが、 実際の運用では、定番のWWWサ ーバを使いウエブサイトを構築します。 定番中の定番、apache(発音:あぱっち)でホームページを立て てみましょう index.htmlは同じものを使ってください 設定ファイルを編集する必要があります(ここは各自で調べてください)

    問540: 問530と同じ課題をnginx(発音:えんじんえっくす)で、やってみてください (脚注) インストール自体は、ただapt installするだけなので「やさしい」のですが、 各ソフトウエアの設定ファイルが、それぞれ異なる 場所にあり、異なる流儀で書かれているため、 初心者には難しいらしいです。 それで「若干むずかしい」に分類しました。 でも流儀 なんて数系統しかないので、そのうち慣れます。いや、この際なれましょう:-) 68/78
  41. 自由課題(4): だいぶ難しい ハンズオンでは経験しづらいのですが、HTTPの実際のデータ転送はTCP/IPが行います。 TCP/IPはインターネ ットの基本的な動作原理で、われわれはTCPを40年以上つかってきましたが、 いまHTTPは「TCPではない仕 組みのHTTP/3」へ移行しつつあります。 問910: HTTP/3の動作原理を調べて見てください。それ以前のHTTP/2と何が違うのでしょうか? 問920:

    HTTP/3のメリットとデメリットとは何でしょうか? 問930: オンラインショッピングのサイトを運用しているあなたは、 そのサーバをHTTP/3化するべきでし ょうか? HTTP/3化する場合、どのような設計にするべきかを考えてみてください (脚注1) 1983年1月1日にTCP/IPへ全面的に切り替わりました(第1世代のNCPの利用が終了)。それから41年です (脚注2) 1983年の夏の終わりには、TCP/IPを搭載した(いわばARPANETの推奨OS)4.2BSD(バークレイUNIX)が公式リリースされました (脚注3) 難易度の想定は、学部4年以上です 69/78
  42. 付録B. 自由課題を行う演習環境をどうするか? Windows11だけが大問題です。 素のWindowsで頑張ろうなどと変なことを考えるとハマるので、 すなお にDockerを入れて、この演習環境を起動するのがよいとおもいます。 こうすれば、Windows、MacOSX、そしてLinuxの人、みなさん同じように演習できるはずです Docker環境を用意する手順 演習環境のコンテナイメージをdocker hubに公開しておきました。

    こちら -> fmlorg/debian-pc 作業手順は3段階で (1) docker CLIもしくはDocker desktopをインストールする (2) ターミナルでdockerコマンドを使い演習環境(コンテナ)をセットアップ (3) 演習環境にログインして演習を行う 補足: Windowsでも、 Docker desktopのインストール(1)が終われば、 ターミナル(コマンドプロンプト やPowershell)でdockerコマンドも使えます 次頁以降では Windows11 の環境構築の実行例を紹介します (脚注1) 付録B.はdockerが分かる前提です。 この際なので、自由課題としてdockerを勉強してください:-) (脚注2) 無料のPythonプログラ ミング演習環境Webサービスなら色々ありますが、 インターネットから80/tcpにアクセスできる無料のサービスは見つけられませんで した。 まぁ中途半端なWebサービスを探すより月額500円の低スペックVPSでサーバたてましょう! それがおすすめ 70/78
  43. (1) Docker desktopのインストール https://www.docker.com/products/docker-desktop/ ページ上部メニューの Products から Docker Desktop を選択してクリック

    Download for Windowsをクリックしてインストーラをダウンロード ダウンロードフォルダにDocker Desktop Installer.exeというファイルがあるはずです。 それをクリックしてインストールしてください 71/78
  44. (2) Powershellでdockerコマンドを使う(実行例) [実行例(コンテナの起動)] PS C:\Users\user99> docker run --rm -d -p

    80:80 --name ex fmlorg/debian-pc ... 略 ... ceb335b95d58aac1dcf57f2df54d05e6c05473cb382e75c79edc6195ad910422 上のように docker run すれば、 本ウエビナーで使っていた演習環境と同じもの(コンテ ナ)を起動できます --name ex でコンテナに名前 ex (exerciseのex)をつけています。 次ページでもdockerコマン ドの引数に ex が使われていることに着目してください (脚注) Docker Desktopのインストールが終わればdockerコマンドが使えるようになっています。 このページ以降では、ターミナルでdockerコマンドを叩きます 72/78
  45. (3) Powershellから演習環境にログインする(実行例) コンテナへはsshではなくターミナルの上で直接はいります。この場合パスワードもありません。 debian-pcコンテナに入ると、ユーザrootの立場でコンテナの中に出現してしまいます。 演習はユーザadminで行うので、ユーザadminになり代わってから演習を行ってください suコマンドでユーザadminに切り替えます (注: su = substitute

    user) 場所が異なるので、引数なしのcdコマンドを実行してください。これで/home/adminへ移動します これでテキストと同じ演習環境になりました [実行例(コンテナ(コンテナ名はex)へログインする)] PS C:\Users\user99> docker exec -it ex /bin/bash root@ceb335b95d58:/# su admin admin@ceb335b95d58$ cd admin@ceb335b95d58$ curl -O https://lpic-2024q2.demo.fml.org/dist/www.py ... 省略 ... admin@ceb335b95d58$ sudo python3 www.py (debug) serving at port 80 (脚注) 直接とは? -> 「目の前でPCを操作できる危ない状態」の仮想版くらいで納得してもらえれば、まぁ、はい。 73/78
  46. (3) docker desktop (実行例) 動作確認するには、 中央あたりにあるポートマ ッピング 80:80 をクリックしてください。 コンテ

    ナの中で実行しているwww.pyにHTTPでアクセ スできます この環境では、WWWサーバにドメイン名をつ けられません docker desktopからクリックするか http://localhost:80/へのアクセスで確認して ください (あえて言えばサーバ名がlocalhost) 74/78
  47. 付録C. リファレンス 演習で使うスクリプトやワークシートは、こちら( https://lpic-2024q2.demo.fml.org/ )で 配布しています 本日のスライド (lectures.fml.org/slides/skill-exp/lpic-2024q2/) 元になった演習(1.と2.)と、1.の大元の演習(3.); いずれも情報システム工学科3年生の授業

    1. 情報システム開発基礎演習 (必修, CC BY-NC-SA 4.0) 2. コンピュータネットワーク (必修, CC BY-NC-SA 4.0) 3. クラウドコンピューティング (選択, CC BY-NC-SA 4.0) [ホームページ(www.fml.org)]   [自分の全授業のスライド群(lectures.fml.org)]   [github(@fmlorg)]   [twitter] 75/78
  48. 付録F. 構成図の答え(簡易版) 実体の無いサイバースペース上の場所を想像してください この演習は単純なHTMLなのでブラウザの上の方にURL(=場 所)が表示されていると思います。確認してみてください 演習環境( www.user数字.demo.fml.org ) 手元のPCからsshでアクセスしている演習先は 「

    www.user数字.demo.fml.org 」というサーバ www.pyを動かしているのは、このサーバ ここからjanken.htmlをダウンロードします。 ダウンロ ードしたコンテンツ(janken.htmlの中身)を手元のブラ ウザがレンダリングした結果が(A)です (A)でジャンケンの手を入力し、jankenponをクリックする と、アクセスする先はapi.fml.org (このサーバ名はform文の actionのURLに登場しています) form文で入力したキーと値を送る先は、 actionで指定して いるapi.fml.orgです(このキーと値を送る演習がP.45でし た)。 このサーバがジャンケンの結果を返し、 その結果を 手元のブラウザがレンダリングした結果が(B)です (脚注) 長いバージョンの解説は、後日つくる予定です 78/78