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