Slide 1

Slide 1 text

入門 サーバサイドプログラミング @cordx56 cordx.net 1

Slide 2

Slide 2 text

本講座の概要 ❖ 本講座はサーバサイドプログラミング入門講座です ❖ 受講者の想定としては ➢ サーバサイドプログラミングを始めてみたいけど何から始めていいかわからない ➢ サーバプログラムがどうやって動いているのか見てみたい ➢ CUIでもっと応用的なプログラミングをしてみたい ➢ そもそもサーバって何? ➢ などなど ❖ 環境としてはUbuntuを想定しています 2

Slide 3

Slide 3 text

事前準備 ❖ 次のページを参考に、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

Slide 4

Slide 4 text

目次 ❖ サーバとは? ❖ 環境構築基礎 ❖ サーバプログラムの実行 ❖ Web技術を学ぼう ➢ URL ➢ リクエストメソッド ➢ セッション管理 ❖ 基本課題 ❖ 発展課題 ❖ さいごに 4

Slide 5

Slide 5 text

サーバとは? ❖ サーバあるいはサーバー(英: server)は、サービスを提供するコンピュータ である。コンピュータ分野のクライアントサーバモデルでは、クライアント からの要求に対して情報や処理結果を提供する機能を果たす側の コンピュータやソフトウェアを指す。 ➢ Wikipedia「サーバ」より引用 ❖ 現在のコンピュータネットワークは基本的にサービスを提供するサーバと サービスを利用するクライアント、という考え方のもと、様々な機能を 実現している ❖ 皆さんのパソコンは特に何もしなければクライアントとして サーバの提供するサービスを利用する側になる ➢ Google検索はGoogleのサーバが提供するサービス、我々はクライアント 5

Slide 6

Slide 6 text

サーバとは? ❖ サーバとなるコンピュータはサーバプログラムを実行することで、 クライアントにサービスを提供している ➢ サーバプログラムを実行しているコンピュータのことをサーバと呼ぶ ❖ サーバに使うコンピュータも私達が普段使っているコンピュータと同じ ようなアーキテクチャを利用している ➢ つまり皆さんのパソコンもサーバプログラムを実行することでサーバとして使える ➢ 勿論Windows上でもサーバプログラムを実行できる ■ 環境構築さえすれば 6

Slide 7

Slide 7 text

環境構築基礎 ❖ ここからは広くサーバ用途で用いられているLinuxでの環境構築のお話 ❖ サーバソフトウェアを動かすためのツールをインストールする ❖ 今回はUbuntuの環境を想定 ➢ 最も広く使われているディストロのひとつ ❖ 基本的にはパッケージマネージャを使ってインストールをする ➢ 特別な理由がなければこれが楽 7

Slide 8

Slide 8 text

環境構築基礎 ❖ Python実行環境のインストール $ sudo apt install python3 python3-pip ❖ これだけ ❖ 本講座中ではFlaskというフレームワークを使うのでこちらもインストール $ pip3 install flask 8

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

環境構築基礎 ❖ Node.js実行環境のインストール $ sudo apt install nodejs npm ❖ これだけ ❖ 追加でパッケージ群をインストールする $ cd ~/serverside-primer/nodejs $ npm install 10

Slide 11

Slide 11 text

環境構築基礎 ❖ Go言語コンパイル環境のインストール $ sudo apt install golang ❖ これだけ 11

Slide 12

Slide 12 text

環境構築基礎 ❖ 実際はもっと複雑なインストール手順を踏むこともある ➢ バージョンを厳密にしたほうがいい、最新のものを使いたいなどの理由から ソースコードをビルドしてインストールする場合 ➢ 最近だと、Dockerだけインストールしておいて、あとは必要なイメージを pullして使うなりDockerfileを書いて環境を構築して使うなり、というので 環境構築を済ませる例もある ❖ 特別な理由がない限りはaptなどのパッケージマネージャを使った インストールが楽なので、これで十分でしょう ➢ 興味がある人はDockerをインストールして使ってみるのもよし ■ Windowsの場合はWSL2必須です 12

Slide 13

Slide 13 text

サーバプログラムの実行 ❖ ここでは既存のプログラムを利用し、サーバを稼働させてみましょう 13

Slide 14

Slide 14 text

実行 - Python & Flask ❖ Pythonサーバスクリプトを実行してみよう $ cd ~/serverside-primer/python $ ./sample1.py ❖ 準備が終わったら、Webブラウザで http://localhost:8000/ にアクセス ❖ 実行の停止はCtrl+Cで行えます 14

Slide 15

Slide 15 text

実行 - 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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Web技術を学ぼう ❖ ここからはWeb関連技術について少し学んでいきます ❖ ここからはPythonを使います 18

Slide 19

Slide 19 text

URL ❖ 次のURLを例に、URLの構成を見ていこう http://localhost:8000/hello?name=world ❖ httpの部分はプロトコルを表す ➢ httpの他に、https、ftpなどが存在する ❖ localhostの部分はFQDNを表す ➢ 接続先のコンピュータの名前という認識で OK ❖ 8000の部分はポート番号を表す ➢ ポートを使い分けることで、一つのコンピュータに複数の役割をもたせることができる ❖ /helloの部分はパスを表す ➢ 要求するディレクトリまたはファイルの名前 19

Slide 20

Slide 20 text

URL ❖ 次のURLを例に、URLの構成を見ていこう http://localhost:8000/hello?name=world ❖ ?name=worldの部分はクエリパラメータを表す ➢ サーバに追加で情報を送ることが可能 ➢ sample1では、このパラメータに名前を渡すことで名前を表示した 20

Slide 21

Slide 21 text

URL ❖ python/sample1.pyを編集して、URLの変更を行ってみよう $ cd ~/serverside-primer/python $ emacs sample1.py ❖ 次の行を変更します @app.route(“/”) ❖ 次のように変更します @app.route(“/hello”) 21

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

URL ❖ クエリパラメータでサーバに情報を渡してみよう $ ./sample1.py ❖ Webブラウザで http://localhost:8000/hello?name=world に アクセスしてみてください ❖ 書き換えたのはURLのクエリパラメータの部分 ❖ ?name=world で、nameに対してworldという値を与えている ➢ worldを書き換えて、表示されるメッセージが変わるのを確認してください 23

Slide 24

Slide 24 text

http - リクエストメソッド ❖ httpには要求時に実行したいアクションを定義する項目があり、 これをリクエストメソッドと呼ぶ ❖ 例えば ➢ ファイルを取得したい時には GETメソッド(要求ボディがセットできません) ➢ ファイルを投稿したい時には POSTメソッド ➢ ファイルを削除したい時には DELETEメソッド ❖ これらは例であり、実際に各メソッドに対してどういったアクションを 行うかはサーバアプリケーションの開発者が決めることができる ➢ 一般的には、情報の取得を行うときには GETメソッドを使う、 情報の送信を行う時には POSTメソッドを使うといった使い分けがなされている 24

Slide 25

Slide 25 text

http - セッション管理 ❖ httpはステートレスと言って、状態を持たない ➢ 例えばショッピングカートの内容を覚えておくことはできない ■ でもできてるじゃん ❖ 開発者によって適切なセッション管理がなされている場合のみ、 状態を管理することができる ❖ セッション管理を行う方法としてCookieの利用が挙げられる ➢ とりあえずCookieというものがある、とだけ覚えておけば大丈夫です 25

Slide 26

Slide 26 text

http - セッション管理 ❖ python/sample2.pyでセッション管理の様子をみてみよう $ cd ~/serverside-primer/python $ emacs sample2.py ❖ 次の行でセッション情報を変更しています session[“count”] += 1 ❖ session[“count”]の中身はセッションが続く間記憶されます ➢ ./sample2.pyを実行し、Webブラウザで http://localhost:8000/countup にアクセスして、 更新するたびに数値が増加していくことを確認してください 26

Slide 27

Slide 27 text

http - セッション管理(発展) ❖ ブラウザの開発者ツールでCookieの中身を見てみよう ❖ 次のCookieの値は例です session=eyJjb3VudCI6MX0.X-Dlkw.tH3XCiEfLN8leyIW_Re5UinUKbQ ❖ eyJjb3VudCI6MX0の部分をbase64デコードしてみよう {"count":1} ❖ Flaskのsessionはその中身をbase64エンコードしたものを Cookieに持たせていることがわかる ➢ うしろの部分はタイムスタンプと署名です 27

Slide 28

Slide 28 text

基本課題 1 ❖ コンピュータとじゃんけんできるサーバプログラムを書いてみよう $ cd ~/serverside-primer/python $ emacs exer1.py ❖ TODOとコメントしてあるところから書いていってください ❖ 解答例はanswer1.pyにあります 28

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

発展課題 ❖ sample3の中身を理解しよう ➢ python/sample3.pyはコメントがついています ❖ 自分の作りたいサーバプログラムを書いてみよう ➢ まずはsampleをコピーして、処理を追加していくところから始めるのをおすすめします ❖ 他の言語に興味がある方は、他の言語も触ってみましょう ➢ PHP、Node.js、Go言語でサンプルスクリプトを用意してあります 30

Slide 31

Slide 31 text

さいごに お疲れさまでした サーバプログラムが書けるようになったら、次はサーバの準備です 今回の講座のように自分のパソコンをサーバにすることもできますが、 サーバを公開するには、外部のサーバを借りるのがおすすめです ConoHaやさくらのVPSなどは手軽に始められておすすめです 31