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

入門サーバサイドプログラミング

 入門サーバサイドプログラミング

デジクリで2021年3月5日に開催した入門サーバサイドプログラミング講座の講座資料です。

講座で利用したサンプルコードは次のリポジトリにまとまっています。適宜ご活用ください。
https://github.com/SIT-DigiCre/serverside-primer

Kaoru Chisen

March 05, 2021
Tweet

More Decks by Kaoru Chisen

Other Decks in Programming

Transcript

  1. 事前準備 ❖ 次のページを参考に、Ubuntuをインストールしてください ➢ https://docs.microsoft.com/ja-jp/windows/wsl/install-win10 ➢ 今回はWSL1のみで大丈夫です ❖ Ubuntuを起動できたら、次のコマンドを入力してください $

    sudo apt update $ sudo apt install emacs git $ git clone https://github.com/SIT-DigiCre/serverside-primer.git ~/serverside-primer ❖ コピペする場合、$は含めず、一行ずつコピーして実行してください ❖ パスワードの入力を求められた場合は、入力してください 3
  2. 目次 ❖ サーバとは? ❖ 環境構築基礎 ❖ サーバプログラムの実行 ❖ Web技術を学ぼう ➢

    URL ➢ リクエストメソッド ➢ セッション管理 ❖ 基本課題 ❖ 発展課題 ❖ さいごに 4
  3. サーバとは? ❖ サーバあるいはサーバー(英: server)は、サービスを提供するコンピュータ である。コンピュータ分野のクライアントサーバモデルでは、クライアント からの要求に対して情報や処理結果を提供する機能を果たす側の コンピュータやソフトウェアを指す。 ➢ Wikipedia「サーバ」より引用 ❖

    現在のコンピュータネットワークは基本的にサービスを提供するサーバと サービスを利用するクライアント、という考え方のもと、様々な機能を 実現している ❖ 皆さんのパソコンは特に何もしなければクライアントとして サーバの提供するサービスを利用する側になる ➢ Google検索はGoogleのサーバが提供するサービス、我々はクライアント 5
  4. 環境構築基礎 ❖ Python実行環境のインストール $ sudo apt install python3 python3-pip ❖

    これだけ ❖ 本講座中ではFlaskというフレームワークを使うのでこちらもインストール $ pip3 install flask 8
  5. 環境構築基礎 ❖ PHPサーバ環境のインストール $ sudo apt install php ❖ これだけ

    ❖ 自動でApache2などのサーバ環境もインストールされる ➢ 依存関係が設定されているため ❖ 実行時にはApache2のサービスを起動しておく必要がある 9
  6. 環境構築基礎 ❖ Node.js実行環境のインストール $ sudo apt install nodejs npm ❖

    これだけ ❖ 追加でパッケージ群をインストールする $ cd ~/serverside-primer/nodejs $ npm install 10
  7. 実行 - Python & Flask ❖ Pythonサーバスクリプトを実行してみよう $ cd ~/serverside-primer/python

    $ ./sample1.py ❖ 準備が終わったら、Webブラウザで http://localhost:8000/ にアクセス ❖ 実行の停止はCtrl+Cで行えます 14
  8. 実行 - PHP & Apache2 ❖ Webページ用の公開ディレクトリにPHPファイルをコピーしよう $ cd ~/serverside-primer/php

    $ sudo cp ./sample1.php /var/www/html ❖ 実行に必要なサービスを起動しよう $ sudo service apache2 start ❖ 上記コマンドでコピーを終えたら、Webブラウザで http://localhost/sample1.php にアクセス 15
  9. 実行 - Node.js & Express ❖ Node.jsサーバスクリプトを実行してみよう $ cd ~/serverside-primer/nodejs

    $ node sample1.js ❖ 準備が終わったら、Webブラウザで http://localhost:8000/ にアクセス ❖ 実行の停止はCtrl+Cで行えます 16
  10. 実行 - Go言語 & Gin ❖ Go言語サーバスクリプトをコンパイル&実行してみよう $ cd ~/serverside-primer/go

    $ go build $ ./serverside-primer ❖ 準備が終わったら、Webブラウザで http://localhost:8000/ にアクセス ❖ 実行の停止はCtrl+Cで行えます 17
  11. URL ❖ 次のURLを例に、URLの構成を見ていこう http://localhost:8000/hello?name=world ❖ httpの部分はプロトコルを表す ➢ httpの他に、https、ftpなどが存在する ❖ localhostの部分はFQDNを表す

    ➢ 接続先のコンピュータの名前という認識で OK ❖ 8000の部分はポート番号を表す ➢ ポートを使い分けることで、一つのコンピュータに複数の役割をもたせることができる ❖ /helloの部分はパスを表す ➢ 要求するディレクトリまたはファイルの名前 19
  12. URL ❖ python/sample1.pyを編集して、URLの変更を行ってみよう $ cd ~/serverside-primer/python $ emacs sample1.py ❖

    次の行を変更します @app.route(“/”) ❖ 次のように変更します @app.route(“/hello”) 21
  13. URL ❖ サーバを起動してWebブラウザからアクセスしてみよう $ ./sample1.py ❖ Webブラウザで http://localhost:8000/hello にアクセスしてみてください ❖

    先ほど書き換えたのはURLのパスの部分 ➢ 自由に書き換えて、Webブラウザからアクセスできるパスが変わるのを確認してください 22
  14. URL ❖ クエリパラメータでサーバに情報を渡してみよう $ ./sample1.py ❖ Webブラウザで http://localhost:8000/hello?name=world に アクセスしてみてください

    ❖ 書き換えたのはURLのクエリパラメータの部分 ❖ ?name=world で、nameに対してworldという値を与えている ➢ worldを書き換えて、表示されるメッセージが変わるのを確認してください 23
  15. http - リクエストメソッド ❖ httpには要求時に実行したいアクションを定義する項目があり、 これをリクエストメソッドと呼ぶ ❖ 例えば ➢ ファイルを取得したい時には

    GETメソッド(要求ボディがセットできません) ➢ ファイルを投稿したい時には POSTメソッド ➢ ファイルを削除したい時には DELETEメソッド ❖ これらは例であり、実際に各メソッドに対してどういったアクションを 行うかはサーバアプリケーションの開発者が決めることができる ➢ 一般的には、情報の取得を行うときには GETメソッドを使う、 情報の送信を行う時には POSTメソッドを使うといった使い分けがなされている 24
  16. http - セッション管理 ❖ httpはステートレスと言って、状態を持たない ➢ 例えばショッピングカートの内容を覚えておくことはできない ▪ でもできてるじゃん ❖

    開発者によって適切なセッション管理がなされている場合のみ、 状態を管理することができる ❖ セッション管理を行う方法としてCookieの利用が挙げられる ➢ とりあえずCookieというものがある、とだけ覚えておけば大丈夫です 25
  17. http - セッション管理 ❖ python/sample2.pyでセッション管理の様子をみてみよう $ cd ~/serverside-primer/python $ emacs

    sample2.py ❖ 次の行でセッション情報を変更しています session[“count”] += 1 ❖ session[“count”]の中身はセッションが続く間記憶されます ➢ ./sample2.pyを実行し、Webブラウザで http://localhost:8000/countup にアクセスして、 更新するたびに数値が増加していくことを確認してください 26
  18. http - セッション管理(発展) ❖ ブラウザの開発者ツールでCookieの中身を見てみよう ❖ 次のCookieの値は例です session=eyJjb3VudCI6MX0.X-Dlkw.tH3XCiEfLN8leyIW_Re5UinUKbQ ❖ eyJjb3VudCI6MX0の部分をbase64デコードしてみよう

    {"count":1} ❖ Flaskのsessionはその中身をbase64エンコードしたものを Cookieに持たせていることがわかる ➢ うしろの部分はタイムスタンプと署名です 27
  19. 基本課題 1 ❖ コンピュータとじゃんけんできるサーバプログラムを書いてみよう $ cd ~/serverside-primer/python $ emacs exer1.py

    ❖ TODOとコメントしてあるところから書いていってください ❖ 解答例はanswer1.pyにあります 28
  20. 基本課題 2 ❖ じゃんけんの成績をセッション情報として保持するようにしてみよう $ cd ~/serverside-primer/python $ emacs exer2.py

    ❖ TODOとコメントしてあるところから書いていってください ❖ 解答例はanswer2.pyにあります 29