コボラーがpython始めてみた話
TRANSCRIPT
COBOL エンジニアがDjango で web アプリを作る
まで日本システム技研 中島祐樹
いきなりですが、勉強会の過去の発表者みんな凄い人じゃないです?
みんなの python 勉強会なんだから庶民である僕でも python が使えるところを見せて敷居を下げなければ!
ーで、お前誰よ
{“name”:” 中島祐樹” }{“age”:31}{“company”:” 日本システム技研” }{“my favolite”:”seiyuu”}{“twitter”:”@nakajidamedeath”}
大学:文系 ( 西洋史 ) 業務歴: 6 年ぐらい COBOL オンリー 1 年ぐらい C#(.NETFramework3.5) 3 ヶ月ぐらい Django 2 ヶ月ぐらい python← いまここ!
僕がいた某現場のイメージ
画像元:Wikipedia
←お客様←情室←大手 Sier←中抜き業者 (大手Sierと仲が良い )←僕の派遣先とその下請け
僕がいた某現場のイメージ・はっきり言ってエンジニアの仕事じゃない・キックオフからリリースまでの三ヶ月で修正は2日ぐらい・設計書から進捗管理まで全てはエクセル・ホーガン氏・保守チームだったので失敗すれば怒られる、出来て当たり前・修正方法が分かってるようなバグでも直させてもらえない→各種調整のため・僕が頑張っても中抜き業者が儲かるだけなのでやる気が出ない・単価も低いし、むしろやる気出さずに辞める方が得じゃね
話し出すとキリが無いのでやめます
Django 始めたきっかけ・ COBOL+ 保守 + ウォーターフォールみたいな仕事はもうムリ!・これからは web !・弊社にたまたま Django 推進運動が起きてた・ COBOL 現場から自社に帰って最初の日に Django入門の勉強会が開催される・最初は訳分からなかった。
言語別給与ランキング
http://hrog.net/2015102624991.html
今回話すこと
知識ほぼ皆無な僕でも web サービスをデプロイすることができた話その時につかんだ、必要な知識や考え方
Django での web サービス開発の話をしていきたいです。
Web サービス作ってみたいけど、よく分からない人向けになるかなと思います
そもそも Web サービスってどう動いてるの?
推薦図書)
プロになるための Web 技術入門
Web を支える技術
ざっくり
パソコンからwebブラウザでアクセス
Webサーバー DBサーバー
参考) Qiita超絶初心者のためのサーバとクライアントの話http://qiita.com/shuntaro_tamura/items/ae55b99deb9e2a170754
http通信
http通信クライアント (.html 的な ) とサーバーの通信・リクエスト:クライアント→サーバーの通信 例 ) GET/POST http://www.XXXXXX.jp/XXX/XXX.html http/1.1 ・レスポンス:サーバーからの戻り 例 ) http/1.1 200 OK 画像データとか色々
基礎的なことだけ・・・GET : URL でパラメータをサーバーに渡す
例: google 検索
POST : http リクエストの中にパラメータを付与する一見してログ等に残らない
・データの更新時・重要なデータの通信 ( パスワードとか )
MVC MTVコントロールWebブラウザ
View処理をするMODELデータベース部分
TemplateほとんどHTML
①リクエスト②取得や更新
③指定④レスポンス
Webアプリケーション
GET http://XXXX/XX.html
http/1.1 200 OK 色々
基本的知識もついたところでWebアプリを作っていきましょう!
Web サービスを作るまでに必要なこと
① 何を作りたいか考える② 環境構築③ 製造④ デプロイ
Web サービスを作るまでに必要なこと
① 何を作りたいか考える ←機能は絞ろう!② 環境構築 ←結構大変!③ 製造 ←今回の肝④ デプロイ ←結構大変!
①何を作りたいか考える・とにかく機能は徹底的に絞る!・ゼッタイ出来るでしょってレベルまで落とす!・機能は後からでも追加可能
②環境構築色々方法はあるので、まずはどれかに絞って行うのが良い ( 色々見ると混乱します )
Qiita の Django 入門に沿って行った
http://qiita.com/kaki_k/items/511611cadac1d0c69c54
エディタについて• SublimeText:導入後にカスタマイズ必要• Vscode:入れるとすぐに使える、横に延びるのが難点• Pycharm:機能豊富な IDE、一年間で 3万円• pycharmCE:無料、 djangoプロジェクトを認識してくれない
その他ソース管理: githubとか bitbucketとか最初は難しいと思うので、苦労するようなら無くても良いような気がします。自分は bitbucketでマスターにプッシュだけ覚えました。ソースツリーがあると楽ちん
これで準備完了です!
作ってみよう!
トップページざっと作ってみたサイト
ざっと作ってみたサイトなんか検索すると結果が表示されるサイト
③製造1.プロジェクトの作成 django-admin.py startproject djangopractice2.APPの作成 python manage.py startapp quest
3. モデルの定義する (データベースの設計 )
5.URLの設定をする6.Viewの処理を書く
4.マイグレートする
7.Template書く8.データベースの設定
1.プロジェクトで出来るフォルダの中身
settings.py:各種の設定ファイル、タイムゾーンとか使用する APPの記載とかurls.py:url を書くviews.py:MVT モデルの Viewに相当※最初は作られないので後で付け足す
2.App 追加で出来るフォルダ
models.py:テーブル定義書きます
urls.py:トップページ /quest/XXの URLを記載views.py:処理を書きます
理由は分からないけど views.pyは作られないので自分で作ってる
3. モデルの書き方基本的にテーブル定義です 1 対 Nの関係を意識すると良いかも? N 対 Nはちょっと難しいのですが、難しく考えなくてもよしなにしてくれます
4.マイグレーションってなに?
定義
Models.py データベースDBの情報
Settings.py
Models.pyに書かれた定義をデータベースに反映させる作業
マイグレーションファイルmakemigrations migrate
4.マイグレーションってなに?
定義
Models.py
←0001との差分だけ持ってる
Makemigrationsするたびに履歴を残してくれるので戻すのも簡単!
マイグレーションファイル 0001
マイグレーションファイル 0002
4.マイグレーションって何?詳しくはこちら!【 django 】マイグレーションツールの使い方https://remotestance.com/blog/2612/
5. URLの設定をするurls.py の最初に書き方の説明は書いてある
"""djangopractice URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.9/topics/http/urls/Examples:Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))"""
日本語でおk
5.urls.pyの書き方urlpatterns =[url(r‘^admin/’, admin.site.urls),url(r‘^$’, views.home, name=‘home’),url(r‘^quest/’, include(‘quest.urls’, namespace=‘quest’)), ]
←admin 機能 ( 詳細は先々月の資料参照 )← トップページ
↑ 今回追加した APP の名前
簡単な正規表現のスキルが必須です!正規表現分からないという人はこちらまで・・ Qiita初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」http://qiita.com/jnchito/items/893c887fbf19e17d3ff9
5.urls.pyの書き方urlpatterns =[url(r‘^admin/’, admin.site.urls),url(r‘^$’, views.home, name=‘home’),url(r‘^quest/’, include(‘quest.urls’, namespace=‘quest’)), ]
←admin 機能 ( 詳細は先々月の資料参照 )
5.urls.pyの書き方urlpatterns =[url(r‘^admin/’, admin.site.urls),url(r‘^$’, views.home, name=‘home’),url(r‘^quest/’, include(‘quest.urls’, namespace=‘quest’)), ]
5.urls.pyの書き方urlpatterns =[url(r‘^admin/’, admin.site.urls),url(r‘^$’, views.home, name=‘home’),url(r‘^quest/’, include(‘quest.urls’, namespace=‘quest’)), ] ↑ 今回追加した APP の名前
Djangoプロジェクトに questアプリを includeするという意味なのでアクセスしても該当するテンプレートが無ければ落ちる!
5.urls.pyが呼び出す viewurlpatterns = patterns('',
url(r'^$', views.Search_view, name='search_result'), # 検索用)
ここに書かれた処理が呼ばれます!
6.views.pyの書き方def Search_view(request): ''' 検索結果の一覧 ''' # 項目名が一致する項目を取得し、その項目から事実を取得、その事実を持つ項目を返す errors = [] if request.method == 'GET’: word = request.GET['word'] quests = Quest.objects.filter(about__icontains=word) return render_to_response('quest/search.html', {‘quests’: quests}, context_instance=RequestContext(request)
← リクエスト:最初にでてきた http 通信
← リクエストの中身が GET か POST
← テンプレートファイルを指定
レスポンスを返す↑
リクエストに対して、処理をしてレスポンスを返す!↓ さっき urls.py で指定したメソッドが呼ばれる
7. テンプレートの書き方基本的には htmlっぽいです
return render_to_response('quest/search.html', {‘quests’: quests}, context_instance=RequestContext(request)
テンプレートの書き方 <tbody> {% for quest in quests %} <tr> <td class="col-xs-4 col-sm-4 col-md-4"><nobr>{{ quest.title }}</nsobr></td> <td class="col-xs-7 col-sm-7 col-md-7">{{ quest.fee }}</td> </td> </tr> {% endfor %} </tbody>
views.pyでリターンしたオブジェクトが使える
データベースの設定標準で以下のデータベースが使えますsettings.pyに記載しますSqlite3:最初はこれでいいかもMySQLOraclePostgreSQL
MYSQLでやりましたが・・文字コードでてこずりました。標準が latinとかいうのだったため、そのまま使用したら全角使った瞬間エラーになりました。。この辺りもググって何とかしましたが、正直あんまり説明出来ません。。。
④デプロイ一通り製造が終わったらいよいよデプロイ!
だがしかし
多分時間も無いし、ここからクラウドの話し始めるのは厳しいのでざっと紹介だけ・・
④デプロイ超難関・クラウドにうpしたい herock→postageSQLを使うと基本無料 アクセスが規定値を超えたら止まるだけでお金はいきなり取られない
僕自身は Azureの IaaSにうpBitanamiなるインストーラーで Djangoも pythonもインストールされた状態でしたが日本語ドキュメントほぼ皆無で結構大変でした。。。
Pythonはどこで勉強したの?正直、ほとんど勉強してませんでした。Djangoのクエリ機能が優秀すぎて、それコピペするだけでほとんど書けてしまったので、気になるところは適当にぐぐってました。
Python 勉強するなら?Paiza:転職サービスだけど、問題が出て、ブラウザ上でソース書いて実行みたいに実践形式で学べる
彼女が出来る ! 年収が出る!
感想・論理部分をほとんど理解しないまま適当にコピペしながら開発していたので苦労した。論理部分はちゃんと覚えておかないとダメ・運良く教えてくれる人が弊社にいたので都度都度訊きながら何とかなった。
Webアプリを始めるには運と論理の扉を開け!
( 時間が余ったら宣伝 )ギークラボ長野
Pycon mini Nagano
6 月に長野でやります!
以上です
終わりだよ〜 (o ・∇・ o)