PythonのウェブフレームワークであるFlaskを学ぶ。

Flaskは、Pythonのウェブフレームワークです。

  • 和英 : (flǽsk)〔実験で使う〕フラスコ〔ウイスキーなどの〕フラスコ瓶

https://a2c.bitbucket.io/flask/_images/logo-full.png
Flaskへ ようこそ — Flask v0.5.1 documentation

Flaskは、Bottleと同じくらい簡単に使えるが、Facebook認証やデータベース統合など、本格的なウェブ開発で役に立つ様々な拡張を備えている。
https://www.oreilly.co.jp/books/images/picture978-4-87311-738-6.gif

ウェブフレームワークは、クライアントからの要求とサーバの応答を処理してくれます。

https://camo.qiitausercontent.com/709d8bdb4a5bb2d9223cc468e21f2dcbcb2cfb19/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f36353331322f63303638613462632d643964372d373363662d353332352d3166346536616538333536632e706e67
Python Webフレームワーク Django vs Pyramid vs Flask 2015年12月 - Qiita

WSGIライブラリのwerkzeugとjinja2が入っています。

WSGIとは、PythonでのWebサーバとWebアプリケーションをつなぐインターフェースを定義した仕様です。

WSGIJavaにおけるJava Servelet APIと同じように,WebサーバとWebアプリケーション間の汎用的なインターフェースを定義しています。WSGIを利用することで,WebサーバとWebアプリケーションの実装を切り離すことができ,WebサーバとWebアプリケーションフレームワークの組み合わせを柔軟に選択することができるようになりました。
gihyo.jp

f:id:ponsuke_tarou:20190108201858p:plain
5. WSGIとPylons - Emerge Technology

https://c-bata.link/webframework-in-python/_images/router.png
ルーティング — c-bata.link

本を見ながら実際にFlaskを使ってみます。

  • 環境
    • macOS Mojave バージョン10.14.2
    • Python 3.6.5
    • pip 18.1

https://www.oreilly.co.jp/books/images/picture978-4-87311-738-6.gif

Flaskをインストールします。

# インストールします。
$ pip3 install flask
Collecting flask
  Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB)
    100% |████████████████████████████████| 92kB 701kB/s 
Collecting click>=5.1 (from flask)
  Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
    100% |████████████████████████████████| 81kB 2.3MB/s 
Collecting Jinja2>=2.10 (from flask)
  Downloading https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl (126kB)
    100% |████████████████████████████████| 133kB 1.3MB/s 
Collecting Werkzeug>=0.14 (from flask)
  Downloading https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
    100% |████████████████████████████████| 327kB 2.2MB/s 
Collecting itsdangerous>=0.24 (from flask)
  Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask)
  Downloading https://files.pythonhosted.org/packages/da/fc/2979c425ad23d528d6ac2e1f3efdc28e572fa1e1fbd5a75171cbdd7ddaa5/MarkupSafe-1.1.0-cp36-cp36m-macosx_10_6_intel.whl
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask
Successfully installed Jinja2-2.10 MarkupSafe-1.1.0 Werkzeug-0.14.1 click-7.0 flask-1.0.2 itsdangerous-1.1.0

# バージョン確認します。
$ flask --version
Flask 1.0.2
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 03:03:55) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
$ pip3 -V
pip 18.1 from /Users/mana/Dropbox/ApacheDcumentRoot/Slack-Python-Onboarding-Tutorial/tryFlask/lib/python3.6/site-packages/pip (python 3.6)

リクエストの入口にする try_flask.py を作ります。

ホーム画面用の index.html を作ります。


jinja2を体験してみます。

jinja2は、Python用のテンプレートエンジンです。

f:id:ponsuke_tarou:20190109223501p:plain
Welcome to Jinja2 — Jinja2 Documentation (2.10)

テンプレートのHTMLを作ります。
# templatesディレクトリを作成して、
$ mkdir templates
# その中にHTMLを作ります。
$ echo -n > templates/jinja2.html

動かしてみます。

$ python3 try_flask.py 
 * Serving Flask app "try_flask" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 256-786-415
127.0.0.1 - - [09/Jan/2019 23:23:34] "GET /echo/ponsuke_tarou HTTP/1.1" 200 -
127.0.0.1 - - [09/Jan/2019 23:24:45] "GET /echo?name=ponsuke_tarou&do=%27write%20HatenaBlog%27 HTTP/1.1" 301 -
127.0.0.1 - - [09/Jan/2019 23:24:45] "GET /echo/?name=ponsuke_tarou&do=%27write%20HatenaBlog%27 HTTP/1.1" 200 -
127.0.0.1 - - [09/Jan/2019 23:34:24] "GET /echo/?name=ponsuke_tarou&do=HatenaBlog%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6 HTTP/1.1" 200 -
 * Detected change in '/path/to/try_flask.py', reloading
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 256-786-415

f:id:ponsuke_tarou:20190109221733p:plain
http://localhost:8080/にアクセスするとホーム画面が表示されました。
f:id:ponsuke_tarou:20190109222336p:plain
http://localhost:8080/echo/ponsuke_tarouにアクセスると引数の「ponsuke_tarou」がちゃんとハマった文字列が返されました。
f:id:ponsuke_tarou:20190109233513p:plain
http://localhost:8080/echo/?name=ponsuke_tarou&do=HatenaBlogを書いて にアクセスするとGETで渡した引数がテンプレートにハマって表示されました。

Slack-Python-Onboarding-Tutorial をできるように必要なものを準備する。

  • 環境
    • OS : macOS Mojave バージョン10.14.1
    • Slack : Web版
    • ブラウザ : Chrome バージョン: 71.0.3578.98(Official Build) (64 ビット)
    • Python : 3.6.5
    • pip : 18.1
    • git : version 2.17.2 (Apple Git-113)

前回は、Incoming webhooksでメッセージを送ってみました。

ponsuke-tarou.hatenablog.com

Incoming webhooksではない方法でメッセージを送れるようにSlack-Python-Onboarding-Tutorialをやりたいとおもいます。

github.com

Onboardingは、新規メンバへの教育的なことです。

jinjibu.jp

今回は、チュートリアルに必要なものを準備します。

Pythonをインストールします。

ponsuke-tarou.hatenablog.com

パッケージ管理ツールのpipはPythonにくっついています。

(google翻訳)python.orgからダウンロードしたPython 2> = 2.7.9またはPython 3> = 3.4を使用している場合、またはvirtualenvまたはpyvenvによって作成された仮想環境で作業している場合は、pipは既にインストールされています。
Installation — pip 18.1 documentation

Python開発用の仮想環境を作るツールであるVirtualenv的なものはvenvとしてPythonにくっついています。

(google翻訳)virtualenvは独立したPython環境を作成するためのツールです。
Python 3.3以降、そのサブセットがvenvモジュールの下で標準ライブラリに統合されました。
ただし、venvモジュールはこのライブラリのすべての機能を提供するわけではありません(たとえば、ブートストラップスクリプトを作成できない、ホストpython以外の他のバージョンのPython用の仮想環境を作成できない、再配置できないなど)。
Virtualenv — virtualenv 16.2.0 documentation

venv モジュールは、軽量な "仮想環境" の作成のサポートを提供します。仮想環境には、仮想環境ごとの site ディレクトリがあり、これはシステムの site ディレクトリから分離させることができます。それぞれの仮想環境には、それ自身の Python バイナリ (様々な Python バージョンで環境を作成できます) があり、仮想環境ごとの site ディレクトリに独立した Python パッケージ群をインストールできます。
28.3. venv — 仮想環境の作成 — Python 3.6.5 ドキュメント

チュートリアルリポジトリをクローンします。

f:id:ponsuke_tarou:20190106140937p:plain
URLをコピーする。

# コピーしたURLでクローンします。
$ git clone https://github.com/slackapi/Slack-Python-Onboarding-Tutorial.git
Cloning into 'Slack-Python-Onboarding-Tutorial'...
remote: Enumerating objects: 19, done.
remote: Total 19 (delta 0), reused 0 (delta 0), pack-reused 19
Unpacking objects: 100% (19/19), done.

仮想環境を準備します。

venvで仮想環境を作ります。

qiita.com

# クローンしたディレクトリへ移動します。
$ cd Slack-Python-Onboarding-Tutorial

# 仮想環境を作ります。
$ python3 -m venv slackTutorial

# 仮想環境を有効化します。
$ source slackTutorial/bin/activate

pip3で必要なパッケージをインストールします。

# パッケージをインストールする前に import文でモジュールを検索するディレクトリを確認しておきます。
(slackTutorial) $ python3
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 03:03:55) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Users/mana/Dropbox/ApacheDcumentRoot/Slack-Python-Onboarding-Tutorial/slackTutorial/lib/python3.6/site-packages']
>>> exit()

# pip3の情報を確認しておきます。
(slackTutorial) $ pip3 show pip
Name: pip
Version: 18.1
Summary: The PyPA recommended tool for installing Python packages.
Home-page: https://pip.pypa.io/
Author: The pip developers
Author-email: pypa-dev@groups.google.com
License: MIT
Location: /path/to/Slack-Python-Onboarding-Tutorial/slackTutorial/lib/python3.6/site-packages
Requires: 
Required-by: 

# チュートリアルに必要なパッケージをインストールします。
(slackTutorial) $ pip3 install -r requirements.txt
Collecting click==6.6 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/1c/7c/10b4132dd952b6a04e37626258825b8aa8c1eb99545f2eb26a77c21efb55/click-6.6-py2.py3-none-any.whl (71kB)
    100% |████████████████████████████████| 71kB 1.6MB/s 
Collecting Flask==0.11.1 (from -r requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/63/2b/01f5ed23a78391f6e3e73075973da0ecb467c831376a0b09c0ec5afd7977/Flask-0.11.1-py2.py3-none-any.whl (80kB)
    100% |████████████████████████████████| 81kB 2.6MB/s 
Collecting itsdangerous==0.24 (from -r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz (46kB)
    100% |████████████████████████████████| 51kB 10.1MB/s 
Collecting Jinja2==2.8 (from -r requirements.txt (line 4))
  Downloading https://files.pythonhosted.org/packages/96/a1/c56bc4d99dc2663514a8481511e80eba8994133ae75eebdadfc91a5597d9/Jinja2-2.8-py2.py3-none-any.whl (263kB)
    100% |████████████████████████████████| 266kB 2.2MB/s 
Collecting MarkupSafe==0.23 (from -r requirements.txt (line 5))
  Downloading https://files.pythonhosted.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz
Collecting pyaml==16.9.0 (from -r requirements.txt (line 6))
  Downloading https://files.pythonhosted.org/packages/e3/bb/e920e88da947f3915229dedd7a3c77267d37bcfbfc2e0aa350f33f25f9b3/pyaml-16.9.0.tar.gz
Collecting PyYAML==3.12 (from -r requirements.txt (line 7))
  Downloading https://files.pythonhosted.org/packages/4a/85/db5a2df477072b2902b0eb892feb37d88ac635d36245a72a6a69b23b383a/PyYAML-3.12.tar.gz (253kB)
    100% |████████████████████████████████| 256kB 3.1MB/s 
Collecting requests==2.11.1 (from -r requirements.txt (line 8))
  Downloading https://files.pythonhosted.org/packages/ea/03/92d3278bf8287c5caa07dbd9ea139027d5a3592b0f4d14abf072f890fab2/requests-2.11.1-py2.py3-none-any.whl (514kB)
    100% |████████████████████████████████| 522kB 4.2MB/s 
Collecting six==1.10.0 (from -r requirements.txt (line 9))
  Downloading https://files.pythonhosted.org/packages/c8/0a/b6723e1bc4c516cb687841499455a8505b44607ab535be01091c0f24f079/six-1.10.0-py2.py3-none-any.whl
Collecting slackclient==1.0.2 (from -r requirements.txt (line 10))
  Downloading https://files.pythonhosted.org/packages/db/12/e5198d6e10ead20acdbba5f6a7c22d153d8ea08946ea06e4580f6666cb52/slackclient-1.0.2.tar.gz
Collecting websocket-client==0.37.0 (from -r requirements.txt (line 11))
  Downloading https://files.pythonhosted.org/packages/a3/1e/b717151e29a70e8f212edae9aebb7812a8cae8477b52d9fe990dcaec9bbd/websocket_client-0.37.0.tar.gz (194kB)
    100% |████████████████████████████████| 194kB 1.9MB/s 
Collecting Werkzeug==0.11.11 (from -r requirements.txt (line 12))
  Downloading https://files.pythonhosted.org/packages/a9/5e/41f791a3f380ec50f2c4c3ef1399d9ffce6b4fe9a7f305222f014cf4fe83/Werkzeug-0.11.11-py2.py3-none-any.whl (306kB)
    100% |████████████████████████████████| 307kB 5.1MB/s 
Installing collected packages: click, itsdangerous, MarkupSafe, Jinja2, Werkzeug, Flask, PyYAML, pyaml, requests, six, websocket-client, slackclient
  Running setup.py install for itsdangerous ... done
  Running setup.py install for MarkupSafe ... done
  Running setup.py install for PyYAML ... done
  Running setup.py install for pyaml ... done
  Running setup.py install for websocket-client ... done
  Running setup.py install for slackclient ... done
Successfully installed Flask-0.11.1 Jinja2-2.8 MarkupSafe-0.23 PyYAML-3.12 Werkzeug-0.11.11 click-6.6 itsdangerous-0.24 pyaml-16.9.0 requests-2.11.1 six-1.10.0 slackclient-1.0.2 websocket-client-0.37.0

# 一旦仮想環境から抜けます。
$ deactivate

local環境へLANの外からアクセスできるようにするNgrokをインストールします。

If you are running this project locally, you'll need to set up tunnels for Slack to connect to your endpoints. Ngrok is an easy to use tunneling tool that supports HTTPS, which is required by Slack.
github.com

qiita.com

Web API用のテストツールPostmanをインストールします。

You'll likely want to test events coming to your server without going through the actions on your Slack team. Postman is a useful tool you can use to recreate requests sent from Slack to your server. This is especially helpful for events like user join, where the workflow to recreate the event requires quite a bit of set up.
github.com

qiita.com


f:id:ponsuke_tarou:20190106232448j:plain

はじめてのPythonでSlackとつながってみる

  • 環境
    • OS : macOS Mojave バージョン10.14.1
    • Slack : Web版
    • ブラウザ : Chrome バージョン: 70.0.3538.102
    • curl : 7.54.0 (x86_64-apple-darwin18.0)
    • Python : 3.6.5

ponsuke-tarou.hatenablog.com

SlackAPIってなんだ?

api.slack.com

よくわからないでSlackのIncoming Webhooksを使ってみる

Webhockってなんなのさ!

qiita.com

SlackのIncoming Webhooksってなんなのさ!

get.slack.help

1. Webhockする用のAppを用意する

f:id:ponsuke_tarou:20181121234139p:plainf:id:ponsuke_tarou:20181121234258p:plainf:id:ponsuke_tarou:20181121234453p:plainf:id:ponsuke_tarou:20181121234745p:plain

f:id:ponsuke_tarou:20181121234657p:plain
[App Name]を入力 > [Department Slack Workspace]を選択 > [Create App]ボタンを押下
f:id:ponsuke_tarou:20181121235053p:plain
[Incoming Webhooks]を「ON」にする
f:id:ponsuke_tarou:20181121235446p:plain
同じページの下にある[Add New Webhoock To Workspace]を押下
f:id:ponsuke_tarou:20181127190644p:plainf:id:ponsuke_tarou:20181127190702p:plain

2. Incoming Webhooksを設定する

Incoming Webhooksを設定する

以下サイトの[Incoming Webhooksのエンドポイントを取得する]に従ってIncoming Webhooksを設定する
qiita.com
f:id:ponsuke_tarou:20181127203106p:plain

ちょっと使ってみる

Webhoock URLをゲットする

f:id:ponsuke_tarou:20181127215902p:plain

いろんなプロトコルでデータ転送してくれる curl コマンドを使う

Windowsではインストールが必要
qiita.com

Termialでcurlコマンドを使ってメッセージを送ってみる
# -X <method> : HTTP メソッドの指定
# --data-urlencode name=content : contentをURLエンコードする
curl -X POST --data-urlencode "payload={\"text\": \"初めてWebhoockでメッセージを送信します。\" }" [コピーしたWebhoock URL]

f:id:ponsuke_tarou:20181127222910p:plain
メッセージが届いた。

3. PythonでIncoming Webhooksを使ってSlackにメッセージを送ってみる

Pythonのインターネットにアクセスできる外部モジュール「Requests」をインストールする

ponsuke-tarou.hatenablog.com

Requestsを使ってPythonでメッセージを送ってみる

slack_webhook.pyというPythonのファイルを作って実行すると簡単にできた。

import json, requests

WEB_HOOK_URL = "https://hooks.slack.com/services/"
WEB_HOOK_URL += "WebhookURLの後半"
requests.post(WEB_HOOK_URL, data=json.dumps({
    'text': 'PythonでIncoming Webhooksを使ってSlackにメッセージを送ってみる.',
}))
# 作ったコードを実行する。
python3 slack_webhook.py

f:id:ponsuke_tarou:20190105145837p:plain
送られてきたメッセージ

もう少し使ってみる

slack_webhook.pyというPythonのファイルを作って実行するともう少し楽しいメッセージが送信できた。

はじめてのPythonでSlackとつながってみる

f:id:ponsuke_tarou:20190105171241p:plain
もう少し楽しいメッセージが送信できる。

参考にしたサイト

qiita.com
qiita.com


うまく行かなかったこと

リクエストにTokenがなくて not_authed が返却されました。

よくわからないでブラウザのURL欄に https://otsecbsol.slack.com/api/conversations.createと入力してみました・・・。

{"ok":false,"error":"not_authed"}


f:id:ponsuke_tarou:20181128002041j:plain

Apacheを触ってみる

  • 環境
    • OS : macOS Mojave バージョン10.14.1
    • Apatche : 2.4.37 (Unix)

Apacheは、Webサーバです。

  • 正式名称 : Apache HTTP Server

Apacheという名前はインディアン部族、Apacheに対する敬意の念をあらわすため選んだ」らしいです。
Webサーバで利用されているアプリケーションで、Netcraft社によるとシェアはここ数年下がりつつあるとはいえそれなりにあります。
Web Server Survey | Netcraft

Webサーバは、HTMLファイルやそれに付随する画像などのファイルをクライアントコンピュータに配信するサーバコンピュータのことです。

https://eng-entrance.com/wp-content/uploads/2016/05/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2016-05-25-7.58.03.png
今更聞けない!Webサーバーの仕組みと構築方法

f:id:ponsuke_tarou:20181219233515p:plain
第8回 Webサーバーを作る(Apache) « shell-mag

http://www.atmarkit.co.jp/fjava/special/ejb01/zu03.gif
Webアプリケーションにおけるサーバ・サイドJavaの効果的な利用

Apacheの利点

  1. 多彩なプラットフォーム
    • UNIXWindowsIBMOS/2Mac OS Xなどで動作します。だから特別な環境を用意しなくったって今使っているものが使えちゃうんです。
  2. オープンソース
    • オープンソースのため、興味があれば誰でもソースコードを見ることができます。そのため、常に外部から多くの人の目でチェックされ、改良を続けることでApacheの安定性は高まっています。
    • オープンソースがゆえに、商用製品のような手厚いサポートを受けることはできませが、コミュニティなどやサイトが沢山あるので情報は容易く手に入るのです!
  3. 機能が豊富
    • Apacheは機能を積極的に追加・拡張・機能をモジュールとして分割し、ユーザが新機能を開発するためのAPIも公開しています。このAPIを利用した追加モジュールがユーザによって数多く作成され、公開されています。そのため有用な機能を提供するモジュールはApacheの配布パッケージに含まれることもあるのです。

インストールの方法

qiita.com

起動と停止の方法

ターミナルを使います。

# 起動する
$ apachectl start

# 停止する
$ apachectl restart

# 再起動する
$ apachectl restart

Apacheを起動してからブラウザで「http://localhost:80」を表示すると「It works!」と表示されます。
f:id:ponsuke_tarou:20181227133522p:plain

Apacheを設定してみる

どこに「It works!」が書かれているのでしょう?こういった情報はApacheの設定ファイルで確認できます。

設定ファイルの名前は「httpd.conf」です。

設定ファイルは、Macにデフォルトで入っているApacheの場合は「/etc/apache2/httpd.conf」です。ただ「etc」というディレクトリは「Finder」では見えないのでターミナルで開きます。

$ open /etc/apache2/

アクセスするポート番号をListenに設定します。

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
設定するポート番号の注意 : 80番はよく他のアプリケーションに使われています。

環境によっては「It works!」が表示されない事があります。原因は沢山あるのですが、1つにポート番号があります。

例えば、「Listen 80」と httpd.conf に設定したとします。これはApacheが 80番 のポートを使いますよってことです。

ところが、意外と他のアプリケーションが 80番を使っていてApacheが80番を使えず起動できないことがあります。
qiita.com

まずは現在使われているポート番号を調べます。
Macでは Network Utility を使います。
f:id:ponsuke_tarou:20181210211746p:plain

何のアプリケーションとポート番号がバッティングしているか判ったら方法は2つ
① 使っているアプリのポート番号を変更する
Apacheのポート番号を変更する

②の場合は、「Listen 80」の 80 を変更します。
「8080」あたりが無難です。

そして、Apacheを再起動するとポート番号のバッティングが治ります。

表示するファイルを格納するディレクトリをDocumentRootに設定します。

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/Library/WebServer/Documents"


「/Library/WebServer/Documents」を開いてみると「index.html」というファイルが入っています。ここに「It works!」が書かれています。

< html >< body><h1 >It works!</h1></body></html>
DirectoryIndexに設定されたファイルがデフォルトで表示されます。

ここまででDocumentRootに設定されたディレクトリにある「index.html」が表示されたことがわかりました。
この「index.html」を指定するのがDirectoryIndexになります。
http://localhost:80/」のようにファイル名が指定されない場合はDirectoryIndexに設定されたファイル名が返されて「http://localhost:80/index.html」となります。

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

r7kamura.hatenablog.com

f:id:ponsuke_tarou:20181219233806j:plain

PHPでの変数名の決め方

ルール1:変数名の前には$をつける

じゃぁ「$34」でいい?

ルール2:$の次はアルファベットかアンダースコアから始める

じゃぁ「$A-34」でいい?

ルール3:使えるのは「aからz」「AからZ」「_」(厳密にはもっとあります。)

じゃぁ「$A_34」でどうだ
PHP: 基本的な事 - Manual

ルール4:規約には従いましょう。

みんなてんでばらばらだったら他の人が見てさっぱり分からない・・・ただ、規約っていっぱいあるし・・・・。
なので基本的なマナーレベルは押さえましょう。

マナー1:大文字と小文字の違いだけの変数名を分けて使わない。

「$a_34」「$A_34」読む人も誤記なんだかわざとなんだか・・・分かりにくい。次に書く時だって・・・・間違いやすい。

マナー2:名前に明確な単語を選んで情報を詰め込む

「$A_34」は何に使うためにこの変数を作っているか不明です。
実は、自分の年齢をこの変数に入れたかった・・・のであれば「$myoldis34」みたいな。

マナー3:誤解されない名前にする

年齢は毎年変わります・・・今の年齢を表したければ「$nowmyold」な感じ。

マナー4:読みやすく単語の区切れが分かるように。

単語の区切り方は、Pascal形式とかCamelCaseとかスネーク形式とかいろいろあって規約ごとに違います。
ここは「_」でつなぐスネーク形式で「$now_my_old」な感じ。

f:id:ponsuke_tarou:20181210195305j:plain

超ざっくりPHPってこんなもの

PHPはWebページ作成するサーバサイドのプログラミング言語です。

PHPがないWebサイトを表示する流れ

  1. [www.sample.com/monkey.html]をロケーションバーに入力してEnter!
  2. ブラウザは「www.sample.com」さんへ「monkey.htmlをくれ」、っと要求します。
  3. 「www.sample.com」さんのApache(Webサーバプログラム)は、monkey.htmというファイルlを探してブラウザへ渡します。
  4. ブラウザはもらったmonkey.htmlをHTMLタグに従って表示します。

PHPがあるWebサイトだとWebサーバの中で「いろいろやって」くれます。

2. で要求されたファイルをPHPが「いろいろやって」造ってくれるのです。
3. にある、「www.sample.com」さんのApacheの中でただファイルを探すのではなく、
入力された情報や状態に合わせて「いろいろやって」くれます。

たとえば、
・ 入力された内容をデータベースに保存する(アンケートページや会員登録ページとか)
・ メールを送る(予約ページとか)
・ ユーザー情報から好みのページを造る(会員ページとか)

PHPは「フリー」です。

無料のフリー

PHPは、タダで手に入ります。
ライセンス料、サポート料、アップグレード料もダタです。
※. 個人使用でない場合や別途ツールなんかを使う場合は調べてくださいね。

自由のフリー

PHPオープンソースなので中身をだれでも参照できます。
ソースは見たくないけど機能の使い方は知りたいっていう時でも世の中の誰かが調べた情報がインターネットにたくさん散らばっています。
自由に使っていいんです!(ある程度のルールは守ってくださいね)

造るのに好きなものを自由に選んでいいんです!
OSはWindowsMac OSLinux、Slaris、Unixで使えます。特別な専用サーバを用意しなくても造れるんです!
Webサーバプログラムだって特別なものを用意しなくていいんです!
CGI規格をサポートしていれば、Apach、Microsift Internet InfomationServer ( IIS ) でもいいのです。
データベースもいろいろ選べます。
MySQLOracleMicrosoft SQL ServerSybasePostgreSQLといろいろあります。
ODBC規格のデータベースもサポート済みです。

PHPは情報がたくさんあります。

PHPは近年、たくさんのサイトで使われています。
個人のサイトから大きなサイトまでたくさん!
だから、書籍や雑誌、Webサイトなどでたくさんの情報を参考にできます。
ちょっと使うにも、お仕事で使うにも分からないことがあっても安心タイプです。

LDAP:なんとなくわかった気がしている言葉をはっきりと

LDAPとは、ディレクトリサービスを提供するサーバへアクセスするときに使うプロトコルです。

正式名称 : Lightweight Directory Access Protocol
TCPポート番号の「389」(ウェルノウンポート)を使ってサーバへ接続します

www.atmarkit.co.jp

thinkit.co.jp

X.500という規格の1つであるDAPというプロトコルを軽量化(Lightweight)したものです。

DAPはとても重かったので軽くしたそうです。
例えば、オープンソースLDAPであるOpenLDAPWindowsでよく使われるActive DirectoryなどにLDAPは実装されています。

ディレクトリサービスとは、ネットワークの情報を一元管理し情報提供などを行うサービスです。

ネットワーク内のユーザ情報や機器情報を管理して、参照・更新などを行うサービスです。
ユーザ名から部署や電話番号を検索したり、プリンターの情報を参照できたりします。

例えば、名前解決してくれるDNSオープンソースLDAPであるOpenLDAPWindowsでよく使われるActive Directoryなどがディレクトリサービスです。

https://www.kagoya.jp/howto/wp-content/uploads/kagoya1804-kgr1_50_dns02-.jpg
【図解】DNSサーバーとは?設定・変更と確認方法 | カゴヤのサーバー研究室

http://image.gihyo.co.jp/assets/images/admin/serial/01/ad-linux2017/0001/001r.jpg
第1回 認証統合の概要[Active Directory編]:Active DirectoryとLinuxの認証を統合しよう【2017年版】|gihyo.jp … 技術評論社

階層型にデータを管理するデータベースを使います。

リレーショナルデータベースとは違うのです。
ディレクトリサービスと設定によってはリレーショナルデータベースも使えます。
ディレクトリサービスのように更新より参照が多く組織などから情報を見つけていく場合は階層型のデータベースのが向いています。

http://software.fujitsu.com/jp/manual/manualfiles/M050000/B1WN4901/02/irepsrc/dit.gif
1.2.2 LDAPとは

https://www.turbolinux.co.jp/products/server/11s/user_guide/ldaptree02.jpg
Turbolinux 11 Server: ユーザーガイド

https://techinfoofmicrosofttech.osscons.jp/index.php?plugin=ref&page=LDAP%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%81%A7%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%83%BB%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AA%E6%A4%9C%E7%B4%A2%E5%87%A6%E7%90%86&src=2_DIT%28DirectoryInformationTree%29.png
FrontPage - マイクロソフト系技術情報 Wiki

f:id:ponsuke_tarou:20181205000802j:plain