kdoc - ウェブアプリ開発チートシート

  • 作成日:2014-01-04 13:36:01
  • 修正日:2016-06-08 19:47:52

順番

↑ページトップへ

  1. gitインストール
  2. plenvインストール
  3. cpanmインストール(plenv経由)
  4. Cartonインストール
  5. Mojoliciousインストール
  6. Cinnamonインストール

plenv

↑ページトップへ

# plenvのバージョン
plenv
--version

# インストール可能なPerl
$ plenv install
--list

# バイナリインストール
$ plenv install
5.16.2 -Dusethreads

# change global default perl to 5.16.2
$ plenv
global 5.16.2

# change local perl to 5.14.0
$ plenv local
5.14.0

# run this command after install cpan module, contains executable script.
$ plenv rehash

# アップグレード
$ cd
~/.plenv
$ git pull

# インストール済みリスト
$ plenv versions

# 現在のPerl
$ plenv version

# install cpanm to current perl
$ plenv install-cpanm

cpanm

↑ページトップへ

# 現在のPerlバージョンを確認して、plenv経由でインストール
$ plenv install
-cpanm

# cpanmバージョン確認
$ cpanm
-V

# 自身のアップデート
$ plenv
exec cpanm --self-upgrade

# モジュールのインストール
$ plenv
exec cpanm Plack
$ plenv
exec cpanm Plack/Request.pm
$ plenv
exec cpanm MIYAGAWA/Plack-1.0000.tar.gz
$ plenv
exec cpanm /path/to/Plack-1.0000.tar.gz
$ plenv
exec cpanm http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/Plack-0.9990.tar.gz
$ plenv
exec cpanm git://github.com/plack/Plack.git

# 1.0000 以降
$ plenv
exec cpanm Plack~1.0000
# 最新の 1.xxxx
$ plenv
exec cpanm Plack~">= 1.0000, < 2.0000"
# 特定のバージョン。 Plack~"== 0.9990"と同じ
$ plenv
exec cpanm Plack@0.9990

モジュールの確認

# CGI.pmの場所
$ perldoc
-l CGI
/Users/yugo/.plenv/versions/5.18.1/lib/perl5/5.18.1/CGI.pm

Carton

↑ページトップへ

「アプリケーションにおけるPerlモジュールの依存関係を管理するコマンドラインツール」

# インストール
$ plenv
exec cpanm Carton

# 確認
$ plenv
exec carton -v

# カレントディレクトリのcpanfileファイルを参照して
# カレントディレクトリ直下のlocalディレクトリにモジュールをインストール
# ※cpanfile.snapshotに記録される
$ plenv
exec carton install

# cpanfileを元に…
$ plenv
exec carton install
# cpanfile.snapshotを元に…
$ plenv
exec carton install --deployment

cpanfile

# 0.03 またはそれ以上
requires
'Yugo', '0.03';

# 0.03
requires
'Yugo', '== 0.03';

# 以上とか以下とか
requires
'Yugo', '<= 0.03';
requires
'Yugo', '< 0.03';
requires
'Yugo', '> 0.03';
requires
'Yugo', '>= 0.03';

# Perlの指定も可(cartonとcpanmが反応)
requires
'perl', '5.16.3';

Mojolicious

↑ページトップへ

$ mkdir bloc
$ cd bloc

$ nano cpanfile
requires
'perl', '5.16.3';
requires
'Mojolicious', '== 4.65';
requires
'Plack', '== 1.0030';

$ plenv
exec carton install

# "carton exec"の後ろに" -- "でつないでコマンド
$ plenv
exec carton exec -- mojo generate app Bloc::Web

$ mkdir psgi
$ cd psgi

$ nano bloc
.psgi
use strict;
use warnings;
use Mojo::Server::PSGI;
use Plack::Builder;

use lib './lib';
use Bloc::Web;

my $psgi
= Mojo::Server::PSGI->new( app => Bloc::Web->new );
my $app
= $psgi->to_psgi_app;

builder
{
    $app
;
};

$ cd
..

$ plenv
exec carton exec -- plackup -p 5000./psgi/bloc.psgi

Cinnamon

↑ページトップへ

いろんな変数を設定しつつ、リモートで動かすコマンドをあれこれ記述。
コピーしたり、起動したり、読み込んだり、再起動したり。
Roleというのが「production」とか「develop」とかっていう環境セットとかで、、「update」とか「restart」とかっていうあれこれの動きはTask。
実際のコマンドは例えば「cinnamon production update」とか。

# インストール
$ plenv
exec cpanm Cinnamon

# → cinnamon コマンドが入る
# cinnamon コマンドは config/deploy.pl を自動的に見に行く。
# …ので、アプリケーションのルートから見てconfig/deploy.plに記述するとよい。

# !ここでいったん中断→gitが分かってないとCinnamonの理解はビミョウ。
  • 記述されたコマンドは、そのコマンドごとにログイン/ログアウトするので、cdしてからのコマンドは「&&」でつないで。
    • 複雑になるようなら、シェルスクリプトにまとめて。

サンプル

use strict;
use warnings;
use Cinnamon::DSL;

my $application
= 'My::App';

# リモートホストに接続するならログインユーザ名が必要
set user
=> 'johndoe';

DSL

# role
role production
=> 'production.example.com';

role production
=> [ qw(production1.example.com production2.exampl.ecom) ];

role production
=> sub {
    my $res  
= LWP::UserAgent->get('http://servers.example.com/api/hosts');
    my $hosts
= decode_json $res->content;
    $hosts
;
};

role production
=> 'production.example.com', {
    hoge
=> 'fuga',
};

# task
task update
=> sub {
    my
($host) = @_;
    my $hoge
= get 'hoge'; # parameter set in global or role parameter
   
# ...
};

task server
=> {
    start
=> sub {
      my
($host) = @_;
     
# ...
   
},
    stop
=> sub {
      my
($host) = @_;
     
# ...
   
},
};

# set
set key
=> 'value';

set key
=> sub {
   
# values to be lazily evaluated
};

set key
=> sub {
    my
(@args) = @_;
   
# value to be lazily evaluated with @args
};

# get
my $value
= get 'key';

my $value
= get key => qw(foo bar baz);

# run
my
($stdout, $stderr) = run 'git', 'pull';

# sudo
my
($stdout, $stderr) = sudo '/path/to/httpd', 'restart';

# remote
my
($stdout, $stderr) = remote {
    run  
'git', 'pull';
    sudo
'/path/to/httpd', 'restart';
} $host;

# call
task deploy
=> sub {
  my
($host) = @_;
  call
"update", $host;
  call
"web:restart", $host;
};

Git

↑ページトップへ

  • コミットメッセージでは、1行目が変更内容の要約、1行あけて、3行目に変更した理由、が標準的?
  • 実際に作業しているディレクトリを「ワークツリー」。
  • ワークツリーとリポジトリの間に「インデックス」(準備場所)が用意される。
  1. ディレクトリに新規ファイルを作る。
  2. INDEXにステージする。
  3. コミットメッセージを入力して、コミットする。
  • リモートリポジトリにはoriginという名前を付けるのが一般的。
# INDEXへ追加
$ git add sample
.txt

# push

# clone

# pull