SlideShare uma empresa Scribd logo
1 de 88
Baixar para ler offline
初めてのPadrino 
~ Padrino を利用したWEBアプリケーション作成方法の紹介 ~ 
日本OSS推進フォーラム主催 
第4回アプリケーション部会勉強会 
2014 年12 月11日 
Takeshi Yabe ( @tyabe )
お話すること 
• 自己紹介 
• 第1部 Padrino 概要 
• 第2部 Padrino を使った開発の実践
Takeshi Yabe 
@tyabe 
- アプリケーションエンジニア 
- 主な担当はサーバサイド 
- Yokohama.rb, Shibuya.rb 
- Padrinoとの出会いは2011年頃
第1部 
Padrino 概要 
Padrinoとはどういったものか(歴史・特徴)を説明しつつ、 
Padrinoアーキテクチャの概説、特徴的機能等を説明します。
Padrino とは 
Ruby製のWebアプリケーションフレームワーク 
Webアプリケーションを手早く作るためのDSLである 
Sinatra のコードと設計思想をベースに、 
Webアプリケーション開発でよく使われるであろう 
ライブラリやヘルパーメソッドなどを追加することで、 
複雑なWebアプリケーション開発でも 
利用可能なようにすることを目的としている
Padrino とは
Padrino とは 
Padrino はイタリア語、英語だと Godfather 
“シナトラ”で作られているから らしい…
Padrino とは 
Sinatra ベース 
コードだけではなく設計方針も 
=> 使うときもコレが肝要
Sinatra 
“Sinatra is a DSL for quickly 
creating web applications in Ruby 
with minimal effort” 
http://www.sinatrarb.com/intro より引用 
Sinatra はフレームワークではなく、 
Webアプリケーション(Rackアプリケーション)を 
手早く簡単に記述するためのDSL
Sinatra 
クラシックスタイル 
1 require 'sinatra' 
2 
3 get '/' do 
4 "Hello, sinatra!" 
5 end 
モジュラースタイル 
1 require 'sinatra/base' 
2 
3 class App < Sinatra::Base 
4 get '/' do 
5 "Hello, world!" 
6 end 
7 end 
単体で使うシンプルなアプリならクラシックスタイル 
他のRackアプリと一緒に使うならモジュラースタイル
Sinatra 
簡潔であること 
複雑性は必要になったときに追加
Sinatra 
シンプル!! 
だけど…
my-project 
├── Gemfile 
├── Gemfile.lock 
├── Rakefile 
├── app.rb 
├── config 
│ └── database.rb 
├── config.ru 
├── db 
│ └── development.db 
├── log 
│ └── development.log 
├── mailer.rb 
├── public 
│ ├── javascripts 
│ │ └── app.js 
│ └── stylesheets 
│ └── app.css 
└── views 
├── index.slim 
└── layout.slim 
- ディレクトリ構造 
- DBの設定 
- ログの設定 
- ヘルパーメソッド 
- HTMLエスケープ 
- セッション 
- テスト環境 
- コンソールでの動作確認 
- Rakeタスク 
- などなど 
..楽したい! 
Sinatra
Padrino の歴史 
nesquena が個人で開発 
2009-10 : sinatra_more の開発がスタート 
2009-11 : padrino の開発がスタート(0.1.0 -> 0.2.1) 
2010-02 : sinatra_more が padrino への移行を表明 
2011-12 : sinatra_more 最後のコミット 
… 
2013-10 : 日本人が開発チーム入り(@namusyaka) 
2014-02 : 0.12.0 リリース 
Ruby 1.8 のサポート廃止など大きめの変更 
2014-04 : 0.12.1 リリース 
nesquena と、同僚だった 
DAddYE, achiu で開発 
新しいルーター( pendragon ) 
を開発 
dynamoid のサポート、cache_object helper の追加 
2014-05 : 0.12.2 リリース 
Params Protection の追加 
2014-08 : 0.12.3 リリース 
router, reloader, generator の改善 
2014-10 : 0.12.4 リリース 
mounter が改善され、他のRackアプリのマウントが可能になった
Padrino の利用者
Padrino の主な機能 
- ジェネレータ含むコマンドラインツール 
- サブアプリケーション 
- 他のRackアプリケーションのマウント 
- ルーティングの拡張 
- MVC パターンの導入 
- 豊富なヘルパーメソッド 
- 簡単なメール送信機能 
- キャッシュ機能 
- 国際化機能 
- 他のライブラリと連携可能なロガー 
- 開発時のリローダー
Padrino の構成 
Padrino Framework 
gen helpers 
support 
cache mailers 
admin 
core 
Sinatra
padrino-core
padrino-core 
Sinatra を拡張したベースアプリケーション 
PadrinoFramework の機能を全て使うことができる 
# lib/padrino-core/application.rb 
1 module Padrino 
2 class Application < Sinatra::Base 
3 register Padrino::ApplicationSetup 
4 register Padrino::Routing 
5 register Padrino::ParamsProtection 
register メソッドによる Sinatra 拡張の登録 
use メソッドによる Rack ミドルウェアの登録
padrino-core 
追加される主な機能 
- ルーティングの拡張 
- サブアプリケーションとその他のRackアプリのマウント機構 
- オートロード対象ディレクトリの設定 
- 拡張されたロガー 
- 開発用のリローダー 
- コマンドラインツール ( start, stop, generate, console, runner, rake )
padrino-core 
追加される主な機能 
- ルーティングの拡張 
- サブアプリケーションとその他のRackアプリのマウント機構 
- オートロード対象ディレクトリの設定 
- 拡張されたロガー 
- 開発用のリローダー 
- コマンドラインツール ( start, stop, generate, console, runner, rake )
padrino-core 
ルーティングの拡張(一例) 
1 SampleProject::App.controllers :posts do 
2 get :index do 
3 # url(:posts, :index) => "/posts" 
4 render 'posts/index' 
5 end 
6 
7 get :show, map: '/posts/:id' do 
8 # url(:posts, :show, id: 5) => "/posts/5" 
9 render 'posts/new' 
10 end 
11 end 
名前付きルート、テンプレートエンジンの自動検出
padrino-core 
拡張されたロガー
padrino-gen
padrino-gen 
新しいPadrinoプロジェクトの作成時や 
既存のPadrinoプロジェクトへ 
簡単にコードを追加することができるようになる 
- project 
- app 
- mailer 
- controller 
- helper 
- model 
- migration 
- plugin 
- component 
- task 
- admin 
- admin_page
padrino-gen 
新しいPadrinoプロジェクトの作成時や 
既存のPadrinoプロジェクトへ 
簡単にコードを追加することができるようになる 
- project 
- app 
- mailer 
- controller 
- helper 
- model 
- migration 
- plugin 
- component 
- task 
- admin 
- admin_page
padrino-gen ( プロジェクト生成 ) 
Usage: 
padrino-gen project [name] [options] 
Options: 
-n, [--app=APP] 
-b, [--bundle], [--no-bundle] 
-r, [--root=ROOT] 
[--dev], [--no-dev] 
-i, [--tiny], [--no-tiny] 
-l, [--lean], [--no-lean] 
-a, [--adapter=ADAPTER] 
-p, [--template=TEMPLATE] 
-g, [--gem], [--no-gem] 
padrino プロジェクトで使う場合は 
$ padrino g project 
[--migration-format=MIGRATION_FORMAT] 
-d, [--orm=ORM] 
-t, [--test=TEST] 
-m, [--mock=MOCK] 
-s, [--script=SCRIPT] 
-e, [--renderer=RENDERER] 
-c, [--stylesheet=STYLESHEET]
padrino-gen ( プロジェクト生成 ) 
ORM、データベースアダプタ、テンプレートエンジン、 
テスティングフレームワーク、モックライブラリ、 
スタイルシートエンジン、JavaScriptライブラリ 
必要なものだけを選んで使える ( 選ばなくても良い )
padrino-gen ( プロジェクト生成 ) 
$ padrino g project sample_project 
sample_project 
├── Gemfile 
├── Rakefile 
├── app 
│ ├── app.rb 
│ ├── controllers 
│ ├── helpers 
│ └── views 
│ └── layouts 
├── bin 
│ └── sample_project 
├── config 
│ ├── apps.rb 
│ └── boot.rb 
├── config.ru 
├── log 
├── public 
│ ├── favicon.ico 
│ ├── images 
│ ├── javascripts 
│ └── stylesheets 
└── tmp 
13 directories, 8 files 
$ padrino g project tiny_project ̶tiny 
tiny_project 
├── Gemfile 
├── Rakefile 
├── app 
│ ├── app.rb 
│ ├── controllers.rb 
│ ├── helpers.rb 
│ └── mailers.rb 
├── bin 
│ └── tiny_project 
├── config 
│ ├── apps.rb 
│ └── boot.rb 
├── config.ru 
├── log 
├── public 
│ ├── favicon.ico 
│ ├── images 
│ ├── javascripts 
│ └── stylesheets 
└── tmp 
9 directories, 11 files
padrino-gen ( コンポーネントの追加 ) 
Usage: 
padrino-gen component [options] 
Options: 
-n, [--app=APP] 
-r, [--root=ROOT] 
-a, [--adapter=ADAPTER] 
-d, [--orm=ORM] 
-t, [--test=TEST] 
-m, [--mock=MOCK] 
-s, [--script=SCRIPT] 
-e, [--renderer=RENDERER] 
-c, [--stylesheet=STYLESHEET] 
Description: 
padrino-gen component add components into a Padrino project 
Current Selected Components: 
orm none 
test none 
mock none 
script none 
renderer slim 
stylesheet none 
必要になったときに 
必要なものを追加できる
padrino-gen ( サブアプリケーション ) 
サブアプリケーションは 
モデルやライブラリを共通で使える 
$ padrino g admin 
$ padrino g app api 
sample_project 
├── app 
│ ├── app.rb 
│ ├── controllers 
│ ├── helpers 
│ └── views 
│ └── layouts 
├── admin 
│ ├── app.rb 
│ ├── controllers 
│ ├── helpers 
│ └── views 
│ └── layouts 
├── api 
│ ├── app.rb 
│ ├── controllers 
│ ├── helpers 
│ └── views 
│ └── layouts 
└── public 
├── admin 
│ ├── images 
│ ├── javascripts 
│ └── stylesheets 
├── favicon.ico 
├── images 
├── javascripts 
└── stylesheets 
# config/apps.rb 
1 Padrino.mount('SampleProject::Admin') 
2 .to('/admin') 
3 Padrino.mount('SampleProject::Api') 
4 .to('/') 
5 .host("api.example.org") 
6 Padrino.mount('SampleProject::App') 
7 .to(‘/') 
マウントの設定で、一致させるパスやホスト名を指定できる
padrino-admin
padrino-admin 
ユーザ認証付きの管理アプリが作成できるようになる 
$ padrino g admin
padrino-admin 
# config/apps.rb 
1 Padrino.mount('SampleProject::Admin').to('/admin') 
2 Padrino.mount('SampleProject::App').to('/') 
admin 
├── app.rb 
├── controllers 
│ ├── accounts.rb 
│ ├── base.rb 
│ └── sessions.rb 
└── views 
├── accounts 
│ ├── _form.slim 
│ ├── edit.slim 
│ ├── index.slim 
│ └── new.slim 
├── base 
│ └── index.slim 
├── errors 
│ ├── 403.slim 
│ ├── 404.slim 
│ └── 500.slim 
├── layouts 
│ ├── application.slim 
│ └── error.slim 
└── sessions 
└── new.slim 
7 directories, 15 files 
管理アプリはサブアプリケーションとして 
マウントする
padrino-admin
padrino-admin 
モデルに対応した管理ページを追加できる 
$ padrino g admin_page model
padrino-admin 
管理アプリ用のヘルパーメソッドがいくつか追加される 
1 module SampleProject 
2 class Admin < Padrino::Application 
3 register Padrino::Mailer 
4 register Padrino::Helpers 
5 register Padrino::Admin::AccessControl 
6 
7 set :admin_model, 'Account' 
8 set :login_page, '/sessions/new' 
9 
10 enable :sessions 
11 disable :store_location 
12 
13 access_control.roles_for :any do |role| 
14 role.protect '/' 
15 role.allow '/sessions' 
16 end 
17 
18 access_control.roles_for :admin do |role| 
19 role.project_module :posts, '/posts' 
20 role.project_module :accounts, '/accounts' 
21 end 
22 
23 # Custom error management 
24 error(403) { @title = "Error 403"; render('errors/403', :layout => :error) } 
25 error(404) { @title = "Error 404"; render('errors/404', :layout => :error) } 
26 error(500) { @title = "Error 500"; render('errors/500', :layout => :error) } 
27 end 
28 end
padrino-helpers
padrino-helpers 
フォームやリンク、画像用のタグなど 
HTMLタグを生成するメソッドが使用可能になる 
# => link_to や image_tag などRails と同じようなメソッドが定義されている 
input_tag :text, class: “demo” 
#=> <input type='text' class='demo' /> 
テンプレートをレンダリングするためのメソッド 
( render, partial ) が使用可能になる 
render ‘path/to/any/template' 
partial 'photo/_item', object: @photo, locals: { foo: 'bar' }
padrino-cache
padrino-cache 
テンプレートのレンダリング結果や 
任意のオブジェクトの内容をキャッシュできるようになる 
1 module SampleProject 
2 class App < Padrino::Application 
3 register Padrino::Cache 
4 enable :caching 
5 
6 get '/foo', cache: true do 
7 expires 10 
8 Time.now.to_s 
9 end 
10 end 
11 end 
キャッシュ機構のベースには Moneta が利用されており 
デフォルトで様々なキャッシュストアが利用可能となっている 
1 Padrino.cache = Padrino::Cache.new(:LRUHash) # default choice 
2 Padrino.cache = Padrino::Cache.new(:File, dir: Padrino.root('tmp', app_name.to_s, 'cache')) 
3 Padrino.cache = Padrino::Cache.new(:Memcached, backend: memcached_or_dalli_instance) 
4 Padrino.cache = Padrino::Cache.new(:Redis, backend: redis_instance) 
5 Padrino.cache = Padrino::Cache.new(:Mongo, backend: mongo_client_instance)
padrino-mailers
padrino-mailers 
シンプルなインターフェースでメール配信が行えるようになる 
ファイルの添付やマルチパートも可能 ( Mail ベース ) 
1 class App < Sinatra::Base 
2 register Padrino::Mailer 
3 
4 set :delivery_method, smtp: { 
5 address: ‘smtp.gmail.com’, 
6 port: 587, 
7 domain: 'your.host.name', 
8 user_name: '<username>', 
9 password: '<password>', 
10 authentication: 'plain', 
11 enable_starttls_auto: true 
12 } 
13 
14 post :mail do 
15 email do 
16 from: "foo@example.com", 
17 to: "bar@example.com", 
18 subject: "Welcome!", 
19 body: "This is test mail." 
20 end 
21 end 
22 
23 end 
1 module Sample 
2 class App < Padrino::Application 
3 register Padrino::Mailer 
4 
5 set :delivery_method, :sendmail 
6 
7 mailer :sample do 
8 email :welcome do 
9 from "foo@example.com" 
10 to "bar@example.com" 
11 subject "Welcome!" 
12 add_file "/path/to/someotherfile.png" 
13 provides :html, :plain 
14 render "sample" 
15 end 
16 end 
17 
18 post :mail do 
19 deliver :sample, :welcome 
20 end 
21 
22 end 
23 end
padrino-support
padrino-support 
padrino をサポートするためのライブラリ集 
String の拡張 ( colorize, pluralize ) や 
国際化対応用のyamlファイルが置いてある 
# 一部のメソッドは ActiveSupport のものをそのまま利用している
まとめ
まとめ 
Padrino とは、 
Sinatra の簡潔さを保ちつつ、 
複雑なアプリケーション開発に必要となるような機能を 
必要なときに付け加える事ができるようにした 
Webアプリケーションフレームワーク 
Agnostic 
ORMやテンプレートエンジンなどを自由に組み合わせ可能 
Mountable 
小さなRackアプリケーションを自由に組み合わせ可能
第2部 
Padrino を使った開発の実践 
Padrino で開発を行う際のTipsや 
問題の解決方法などを説明します。
Padrino のエコシステム
Padrino のエコシステム 
- Rackミドルウェア 
- rack-contrib 
- Sinatra の機能拡張 ( SinatraExtention ) 
- sinatra-contrib 
- Padrino の機能拡張 ( Padrino 用の SinatraExtention ) 
- padrino-contrib 
- Padrino のプラグイン機能 
- padrino-recipes に公式のレシピが公開されている
Padrino のエコシステム 
- Rackミドルウェア 
- rack-contrib 
- Sinatra の機能拡張 ( SinatraExtention ) 
- sinatra-contrib 
- Padrino の機能拡張 ( Padrino 用の SinatraExtention ) 
- padrino-contrib 
- Padrino のプラグイン機能 
- padrino-recipes に公式のレシピが公開されている
Padrino のプラグイン機能 ( Templates ) 
プロジェクトの作成手順が記述されたテンプレートファイルを元に 
新しいPadrinoプロジェクトを生成することができる 
$ padrino g project sample --template path/to/my_template.rb
Padrino のプラグイン機能 ( Templates )
Padrino のプラグイン機能 ( Plugins ) 
レシピファイルを元に、 
既存のPadrinoプロジェクトに機能追加が行える 
$ padrino g plugin path/to/my_plugin.rb
Padrino のプラグイン機能 ( Plugins )
その他 
- OmniAuth, Warden 
- jpmobile, Browser 
- will_paginate, Kaminari 
- Better Errors 
#=> Sinatra で使えるものは普通に使える 
- padrino-pipeline, padroni-assets 
#=> Padrino に特化したものもある
Padrino を使っていくと 
遭遇する問題
Padrino を使っていくと遭遇する問題 
- コードの肥大化 
- 各種コマンドでの起動が遅くなる 
- 開発サーバ起動後はリローダーが何とかしてくれるが… 
- Spring は Rails用だし Spork はメンテされていない 
- Sinatra の哲学に従い小さな部品に分割できないか 
- サブアプリケーション 
- アプリケーションの gem 化
Padrino 複数アプリ構成のサンプル
Padrino の情報源
Padrino の情報源 ( 公式ページ )
Padrino の情報源 ( 公式ドキュメント )
Padrino の情報源 ( ebook )
Padrino の情報源 ( 書籍・雑誌 )
Padrino の情報源 ( るびま ) 
0036号
Padrino の情報源 ( その他 )
Padrino の情報源 ( その他 )
Padrino の情報源 ( その他 )
Padrino の情報源 ( コード )
Padrino の情報源 ( idobata ) 
Padrino について雑談できる場所が欲しかったので作った 
https://idobata.io/organizations/padrino-framework-jp/rooms/public/join_request/ 
5b2dda52-c818-45f2-82d6-04c891cb2350
Padrino の今後
Padrino の今後 
Padrino 1.0 へ向けて 
- マルチスレッドのサポート 
- 新しいルーターの導入 
- PadrinoAdmin の刷新 
- ページネーション、検索・フィルタ、ダイナミックなUI など 
- リファクタリング 
- リローダー、ロガー 
- ドキュメントの整備 
依存を少なく、より堅牢でより高速なフレームワークを目指す 
Rack2.0, Sinatra2.0 の動向も注目
Padrino の今後
最後に
Padrino への貢献 
- ドキュメント 
- コードの中、公式ドキュメント、日本語 
- プラグイン 
- 動かないものへのパッチ、自分の欲しいもの 
- gem 
- Rackミドルウェア、SinatraExtention、Padrino専用 
- コード 
- コメント修正、バグ修正、新機能の提案
おまけ
その他のRuby製 
WebApplicationFramework 
個人的に気になっているもの
毎月第3水曜開催 
渋谷周辺で開催(不定) 
http://shibuyarb.doorkeeper.jp/

Mais conteúdo relacionado

Mais procurados

ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?Masahito Zembutsu
 
Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19Hitoshi Kurokawa
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2Yasukazu Kawasaki
 
今日から業務で使える17の運用系Linuxツール、そして円環の理
今日から業務で使える17の運用系Linuxツール、そして円環の理今日から業務で使える17の運用系Linuxツール、そして円環の理
今日から業務で使える17の運用系Linuxツール、そして円環の理Masahito Zembutsu
 
Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Sotaro Omura
 
20170111 macnica networks-nohara_rancher_usecase
20170111 macnica networks-nohara_rancher_usecase20170111 macnica networks-nohara_rancher_usecase
20170111 macnica networks-nohara_rancher_usecaseMinehiko Nohara
 
Serfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwwwSerfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwwwMasahito Zembutsu
 
テストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったことテストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったことYuta Ohashi
 
魔法少女 Laravel
魔法少女 Laravel魔法少女 Laravel
魔法少女 LaravelKenichi Mukai
 
人間たちとsystemd
人間たちとsystemd人間たちとsystemd
人間たちとsystemdUchio Kondo
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方三七男 山本
 
サーバサイドNodeの使い道
サーバサイドNodeの使い道サーバサイドNodeの使い道
サーバサイドNodeの使い道pospome
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口Sunao Tomita
 
Swiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPSSwiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPSjugemjugemjugem
 
魔法少女 Laravel 2014
魔法少女 Laravel 2014魔法少女 Laravel 2014
魔法少女 Laravel 2014Kenichi Mukai
 
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)三七男 山本
 
【Zabbix jp】明日から職場で使えるざびたん
【Zabbix jp】明日から職場で使えるざびたん【Zabbix jp】明日から職場で使えるざびたん
【Zabbix jp】明日から職場で使えるざびたんSeiichiro Ishida
 
Rubyボードハンズオン
RubyボードハンズオンRubyボードハンズオン
Rubyボードハンズオン三七男 山本
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト三七男 山本
 

Mais procurados (20)

ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?
 
Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
 
今日から業務で使える17の運用系Linuxツール、そして円環の理
今日から業務で使える17の運用系Linuxツール、そして円環の理今日から業務で使える17の運用系Linuxツール、そして円環の理
今日から業務で使える17の運用系Linuxツール、そして円環の理
 
Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!
 
20170111 macnica networks-nohara_rancher_usecase
20170111 macnica networks-nohara_rancher_usecase20170111 macnica networks-nohara_rancher_usecase
20170111 macnica networks-nohara_rancher_usecase
 
Serfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwwwSerfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwww
 
テストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったことテストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったこと
 
魔法少女 Laravel
魔法少女 Laravel魔法少女 Laravel
魔法少女 Laravel
 
人間たちとsystemd
人間たちとsystemd人間たちとsystemd
人間たちとsystemd
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方
 
サーバサイドNodeの使い道
サーバサイドNodeの使い道サーバサイドNodeの使い道
サーバサイドNodeの使い道
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口
 
Swiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPSSwiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPS
 
魔法少女 Laravel 2014
魔法少女 Laravel 2014魔法少女 Laravel 2014
魔法少女 Laravel 2014
 
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)
 
【Zabbix jp】明日から職場で使えるざびたん
【Zabbix jp】明日から職場で使えるざびたん【Zabbix jp】明日から職場で使えるざびたん
【Zabbix jp】明日から職場で使えるざびたん
 
Rubyボードハンズオン
RubyボードハンズオンRubyボードハンズオン
Rubyボードハンズオン
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト
 

Destaque

ぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよparrotstudio
 
Sinatra Pattern 20130415
Sinatra Pattern 20130415Sinatra Pattern 20130415
Sinatra Pattern 20130415Naotoshi Seo
 
インフラエンジニアは死んだ Yapc -asia 2014
インフラエンジニアは死んだ Yapc -asia 2014 インフラエンジニアは死んだ Yapc -asia 2014
インフラエンジニアは死んだ Yapc -asia 2014 Satoshi Suzuki
 
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。Tomohiko Himura
 
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...Kazuhiro Hara
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?kwatch
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 

Destaque (8)

ぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよ
 
Sinatra Pattern 20130415
Sinatra Pattern 20130415Sinatra Pattern 20130415
Sinatra Pattern 20130415
 
Accept-language
Accept-languageAccept-language
Accept-language
 
インフラエンジニアは死んだ Yapc -asia 2014
インフラエンジニアは死んだ Yapc -asia 2014 インフラエンジニアは死んだ Yapc -asia 2014
インフラエンジニアは死んだ Yapc -asia 2014
 
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
 
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 

Semelhante a 初めてのPadrino

Redmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspointsRedmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspointsShinji Tamura
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hacki7a
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionSatomi Tsujita
 
CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)Kenji Shirane
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925Yu Ito
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...Shotaro Suzuki
 
Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7Sea Mountain
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
Laravel本とコミュニティの話
Laravel本とコミュニティの話Laravel本とコミュニティの話
Laravel本とコミュニティの話Kazuaki KURIU
 
Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application FrameworkLearningTech
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performancehirokiky
 
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編Daiyu Hatakeyama
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶHiroshi Oyamada
 

Semelhante a 初めてのPadrino (20)

Redmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspointsRedmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspoints
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
 
CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimuraAPIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
 
Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Laravel本とコミュニティの話
Laravel本とコミュニティの話Laravel本とコミュニティの話
Laravel本とコミュニティの話
 
Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application Framework
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
 
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
 

Mais de Takeshi Yabe

Yokohama.rb monthly meetup #50
Yokohama.rb monthly meetup #50Yokohama.rb monthly meetup #50
Yokohama.rb monthly meetup #50Takeshi Yabe
 
Favorite points of padrino
Favorite points of padrinoFavorite points of padrino
Favorite points of padrinoTakeshi Yabe
 
「Eye」でカジュアルにプロセス監視
「Eye」でカジュアルにプロセス監視「Eye」でカジュアルにプロセス監視
「Eye」でカジュアルにプロセス監視Takeshi Yabe
 
Padrino is agnostic
Padrino is agnosticPadrino is agnostic
Padrino is agnosticTakeshi Yabe
 
デブサミ2013 オフィシャルコミュニティLT by Shibuya.rb
デブサミ2013 オフィシャルコミュニティLT by Shibuya.rbデブサミ2013 オフィシャルコミュニティLT by Shibuya.rb
デブサミ2013 オフィシャルコミュニティLT by Shibuya.rbTakeshi Yabe
 
Ruby kajaはじめてます
Ruby kajaはじめてますRuby kajaはじめてます
Ruby kajaはじめてますTakeshi Yabe
 
Ruby kaja はじめます
Ruby kaja はじめますRuby kaja はじめます
Ruby kaja はじめますTakeshi Yabe
 

Mais de Takeshi Yabe (11)

Yokohama.rb monthly meetup #50
Yokohama.rb monthly meetup #50Yokohama.rb monthly meetup #50
Yokohama.rb monthly meetup #50
 
RubyKaja 2014
RubyKaja 2014RubyKaja 2014
RubyKaja 2014
 
RubyKaja 2013
RubyKaja 2013RubyKaja 2013
RubyKaja 2013
 
Favorite points of padrino
Favorite points of padrinoFavorite points of padrino
Favorite points of padrino
 
「Eye」でカジュアルにプロセス監視
「Eye」でカジュアルにプロセス監視「Eye」でカジュアルにプロセス監視
「Eye」でカジュアルにプロセス監視
 
Padrino decorator
Padrino decoratorPadrino decorator
Padrino decorator
 
Padrino is agnostic
Padrino is agnosticPadrino is agnostic
Padrino is agnostic
 
デブサミ2013 オフィシャルコミュニティLT by Shibuya.rb
デブサミ2013 オフィシャルコミュニティLT by Shibuya.rbデブサミ2013 オフィシャルコミュニティLT by Shibuya.rb
デブサミ2013 オフィシャルコミュニティLT by Shibuya.rb
 
RubyKaja 2012
RubyKaja 2012RubyKaja 2012
RubyKaja 2012
 
Ruby kajaはじめてます
Ruby kajaはじめてますRuby kajaはじめてます
Ruby kajaはじめてます
 
Ruby kaja はじめます
Ruby kaja はじめますRuby kaja はじめます
Ruby kaja はじめます
 

Último

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Último (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

初めてのPadrino

  • 1. 初めてのPadrino ~ Padrino を利用したWEBアプリケーション作成方法の紹介 ~ 日本OSS推進フォーラム主催 第4回アプリケーション部会勉強会 2014 年12 月11日 Takeshi Yabe ( @tyabe )
  • 2. お話すること • 自己紹介 • 第1部 Padrino 概要 • 第2部 Padrino を使った開発の実践
  • 3. Takeshi Yabe @tyabe - アプリケーションエンジニア - 主な担当はサーバサイド - Yokohama.rb, Shibuya.rb - Padrinoとの出会いは2011年頃
  • 4.
  • 5.
  • 6.
  • 7. 第1部 Padrino 概要 Padrinoとはどういったものか(歴史・特徴)を説明しつつ、 Padrinoアーキテクチャの概説、特徴的機能等を説明します。
  • 8. Padrino とは Ruby製のWebアプリケーションフレームワーク Webアプリケーションを手早く作るためのDSLである Sinatra のコードと設計思想をベースに、 Webアプリケーション開発でよく使われるであろう ライブラリやヘルパーメソッドなどを追加することで、 複雑なWebアプリケーション開発でも 利用可能なようにすることを目的としている
  • 10. Padrino とは Padrino はイタリア語、英語だと Godfather “シナトラ”で作られているから らしい…
  • 11. Padrino とは Sinatra ベース コードだけではなく設計方針も => 使うときもコレが肝要
  • 12.
  • 13. Sinatra “Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort” http://www.sinatrarb.com/intro より引用 Sinatra はフレームワークではなく、 Webアプリケーション(Rackアプリケーション)を 手早く簡単に記述するためのDSL
  • 14. Sinatra クラシックスタイル 1 require 'sinatra' 2 3 get '/' do 4 "Hello, sinatra!" 5 end モジュラースタイル 1 require 'sinatra/base' 2 3 class App < Sinatra::Base 4 get '/' do 5 "Hello, world!" 6 end 7 end 単体で使うシンプルなアプリならクラシックスタイル 他のRackアプリと一緒に使うならモジュラースタイル
  • 17. my-project ├── Gemfile ├── Gemfile.lock ├── Rakefile ├── app.rb ├── config │ └── database.rb ├── config.ru ├── db │ └── development.db ├── log │ └── development.log ├── mailer.rb ├── public │ ├── javascripts │ │ └── app.js │ └── stylesheets │ └── app.css └── views ├── index.slim └── layout.slim - ディレクトリ構造 - DBの設定 - ログの設定 - ヘルパーメソッド - HTMLエスケープ - セッション - テスト環境 - コンソールでの動作確認 - Rakeタスク - などなど ..楽したい! Sinatra
  • 18.
  • 19. Padrino の歴史 nesquena が個人で開発 2009-10 : sinatra_more の開発がスタート 2009-11 : padrino の開発がスタート(0.1.0 -> 0.2.1) 2010-02 : sinatra_more が padrino への移行を表明 2011-12 : sinatra_more 最後のコミット … 2013-10 : 日本人が開発チーム入り(@namusyaka) 2014-02 : 0.12.0 リリース Ruby 1.8 のサポート廃止など大きめの変更 2014-04 : 0.12.1 リリース nesquena と、同僚だった DAddYE, achiu で開発 新しいルーター( pendragon ) を開発 dynamoid のサポート、cache_object helper の追加 2014-05 : 0.12.2 リリース Params Protection の追加 2014-08 : 0.12.3 リリース router, reloader, generator の改善 2014-10 : 0.12.4 リリース mounter が改善され、他のRackアプリのマウントが可能になった
  • 21. Padrino の主な機能 - ジェネレータ含むコマンドラインツール - サブアプリケーション - 他のRackアプリケーションのマウント - ルーティングの拡張 - MVC パターンの導入 - 豊富なヘルパーメソッド - 簡単なメール送信機能 - キャッシュ機能 - 国際化機能 - 他のライブラリと連携可能なロガー - 開発時のリローダー
  • 22. Padrino の構成 Padrino Framework gen helpers support cache mailers admin core Sinatra
  • 24. padrino-core Sinatra を拡張したベースアプリケーション PadrinoFramework の機能を全て使うことができる # lib/padrino-core/application.rb 1 module Padrino 2 class Application < Sinatra::Base 3 register Padrino::ApplicationSetup 4 register Padrino::Routing 5 register Padrino::ParamsProtection register メソッドによる Sinatra 拡張の登録 use メソッドによる Rack ミドルウェアの登録
  • 25. padrino-core 追加される主な機能 - ルーティングの拡張 - サブアプリケーションとその他のRackアプリのマウント機構 - オートロード対象ディレクトリの設定 - 拡張されたロガー - 開発用のリローダー - コマンドラインツール ( start, stop, generate, console, runner, rake )
  • 26. padrino-core 追加される主な機能 - ルーティングの拡張 - サブアプリケーションとその他のRackアプリのマウント機構 - オートロード対象ディレクトリの設定 - 拡張されたロガー - 開発用のリローダー - コマンドラインツール ( start, stop, generate, console, runner, rake )
  • 27. padrino-core ルーティングの拡張(一例) 1 SampleProject::App.controllers :posts do 2 get :index do 3 # url(:posts, :index) => "/posts" 4 render 'posts/index' 5 end 6 7 get :show, map: '/posts/:id' do 8 # url(:posts, :show, id: 5) => "/posts/5" 9 render 'posts/new' 10 end 11 end 名前付きルート、テンプレートエンジンの自動検出
  • 30. padrino-gen 新しいPadrinoプロジェクトの作成時や 既存のPadrinoプロジェクトへ 簡単にコードを追加することができるようになる - project - app - mailer - controller - helper - model - migration - plugin - component - task - admin - admin_page
  • 31. padrino-gen 新しいPadrinoプロジェクトの作成時や 既存のPadrinoプロジェクトへ 簡単にコードを追加することができるようになる - project - app - mailer - controller - helper - model - migration - plugin - component - task - admin - admin_page
  • 32. padrino-gen ( プロジェクト生成 ) Usage: padrino-gen project [name] [options] Options: -n, [--app=APP] -b, [--bundle], [--no-bundle] -r, [--root=ROOT] [--dev], [--no-dev] -i, [--tiny], [--no-tiny] -l, [--lean], [--no-lean] -a, [--adapter=ADAPTER] -p, [--template=TEMPLATE] -g, [--gem], [--no-gem] padrino プロジェクトで使う場合は $ padrino g project [--migration-format=MIGRATION_FORMAT] -d, [--orm=ORM] -t, [--test=TEST] -m, [--mock=MOCK] -s, [--script=SCRIPT] -e, [--renderer=RENDERER] -c, [--stylesheet=STYLESHEET]
  • 33. padrino-gen ( プロジェクト生成 ) ORM、データベースアダプタ、テンプレートエンジン、 テスティングフレームワーク、モックライブラリ、 スタイルシートエンジン、JavaScriptライブラリ 必要なものだけを選んで使える ( 選ばなくても良い )
  • 34. padrino-gen ( プロジェクト生成 ) $ padrino g project sample_project sample_project ├── Gemfile ├── Rakefile ├── app │ ├── app.rb │ ├── controllers │ ├── helpers │ └── views │ └── layouts ├── bin │ └── sample_project ├── config │ ├── apps.rb │ └── boot.rb ├── config.ru ├── log ├── public │ ├── favicon.ico │ ├── images │ ├── javascripts │ └── stylesheets └── tmp 13 directories, 8 files $ padrino g project tiny_project ̶tiny tiny_project ├── Gemfile ├── Rakefile ├── app │ ├── app.rb │ ├── controllers.rb │ ├── helpers.rb │ └── mailers.rb ├── bin │ └── tiny_project ├── config │ ├── apps.rb │ └── boot.rb ├── config.ru ├── log ├── public │ ├── favicon.ico │ ├── images │ ├── javascripts │ └── stylesheets └── tmp 9 directories, 11 files
  • 35. padrino-gen ( コンポーネントの追加 ) Usage: padrino-gen component [options] Options: -n, [--app=APP] -r, [--root=ROOT] -a, [--adapter=ADAPTER] -d, [--orm=ORM] -t, [--test=TEST] -m, [--mock=MOCK] -s, [--script=SCRIPT] -e, [--renderer=RENDERER] -c, [--stylesheet=STYLESHEET] Description: padrino-gen component add components into a Padrino project Current Selected Components: orm none test none mock none script none renderer slim stylesheet none 必要になったときに 必要なものを追加できる
  • 36. padrino-gen ( サブアプリケーション ) サブアプリケーションは モデルやライブラリを共通で使える $ padrino g admin $ padrino g app api sample_project ├── app │ ├── app.rb │ ├── controllers │ ├── helpers │ └── views │ └── layouts ├── admin │ ├── app.rb │ ├── controllers │ ├── helpers │ └── views │ └── layouts ├── api │ ├── app.rb │ ├── controllers │ ├── helpers │ └── views │ └── layouts └── public ├── admin │ ├── images │ ├── javascripts │ └── stylesheets ├── favicon.ico ├── images ├── javascripts └── stylesheets # config/apps.rb 1 Padrino.mount('SampleProject::Admin') 2 .to('/admin') 3 Padrino.mount('SampleProject::Api') 4 .to('/') 5 .host("api.example.org") 6 Padrino.mount('SampleProject::App') 7 .to(‘/') マウントの設定で、一致させるパスやホスト名を指定できる
  • 39. padrino-admin # config/apps.rb 1 Padrino.mount('SampleProject::Admin').to('/admin') 2 Padrino.mount('SampleProject::App').to('/') admin ├── app.rb ├── controllers │ ├── accounts.rb │ ├── base.rb │ └── sessions.rb └── views ├── accounts │ ├── _form.slim │ ├── edit.slim │ ├── index.slim │ └── new.slim ├── base │ └── index.slim ├── errors │ ├── 403.slim │ ├── 404.slim │ └── 500.slim ├── layouts │ ├── application.slim │ └── error.slim └── sessions └── new.slim 7 directories, 15 files 管理アプリはサブアプリケーションとして マウントする
  • 42. padrino-admin 管理アプリ用のヘルパーメソッドがいくつか追加される 1 module SampleProject 2 class Admin < Padrino::Application 3 register Padrino::Mailer 4 register Padrino::Helpers 5 register Padrino::Admin::AccessControl 6 7 set :admin_model, 'Account' 8 set :login_page, '/sessions/new' 9 10 enable :sessions 11 disable :store_location 12 13 access_control.roles_for :any do |role| 14 role.protect '/' 15 role.allow '/sessions' 16 end 17 18 access_control.roles_for :admin do |role| 19 role.project_module :posts, '/posts' 20 role.project_module :accounts, '/accounts' 21 end 22 23 # Custom error management 24 error(403) { @title = "Error 403"; render('errors/403', :layout => :error) } 25 error(404) { @title = "Error 404"; render('errors/404', :layout => :error) } 26 error(500) { @title = "Error 500"; render('errors/500', :layout => :error) } 27 end 28 end
  • 44. padrino-helpers フォームやリンク、画像用のタグなど HTMLタグを生成するメソッドが使用可能になる # => link_to や image_tag などRails と同じようなメソッドが定義されている input_tag :text, class: “demo” #=> <input type='text' class='demo' /> テンプレートをレンダリングするためのメソッド ( render, partial ) が使用可能になる render ‘path/to/any/template' partial 'photo/_item', object: @photo, locals: { foo: 'bar' }
  • 46. padrino-cache テンプレートのレンダリング結果や 任意のオブジェクトの内容をキャッシュできるようになる 1 module SampleProject 2 class App < Padrino::Application 3 register Padrino::Cache 4 enable :caching 5 6 get '/foo', cache: true do 7 expires 10 8 Time.now.to_s 9 end 10 end 11 end キャッシュ機構のベースには Moneta が利用されており デフォルトで様々なキャッシュストアが利用可能となっている 1 Padrino.cache = Padrino::Cache.new(:LRUHash) # default choice 2 Padrino.cache = Padrino::Cache.new(:File, dir: Padrino.root('tmp', app_name.to_s, 'cache')) 3 Padrino.cache = Padrino::Cache.new(:Memcached, backend: memcached_or_dalli_instance) 4 Padrino.cache = Padrino::Cache.new(:Redis, backend: redis_instance) 5 Padrino.cache = Padrino::Cache.new(:Mongo, backend: mongo_client_instance)
  • 48. padrino-mailers シンプルなインターフェースでメール配信が行えるようになる ファイルの添付やマルチパートも可能 ( Mail ベース ) 1 class App < Sinatra::Base 2 register Padrino::Mailer 3 4 set :delivery_method, smtp: { 5 address: ‘smtp.gmail.com’, 6 port: 587, 7 domain: 'your.host.name', 8 user_name: '<username>', 9 password: '<password>', 10 authentication: 'plain', 11 enable_starttls_auto: true 12 } 13 14 post :mail do 15 email do 16 from: "foo@example.com", 17 to: "bar@example.com", 18 subject: "Welcome!", 19 body: "This is test mail." 20 end 21 end 22 23 end 1 module Sample 2 class App < Padrino::Application 3 register Padrino::Mailer 4 5 set :delivery_method, :sendmail 6 7 mailer :sample do 8 email :welcome do 9 from "foo@example.com" 10 to "bar@example.com" 11 subject "Welcome!" 12 add_file "/path/to/someotherfile.png" 13 provides :html, :plain 14 render "sample" 15 end 16 end 17 18 post :mail do 19 deliver :sample, :welcome 20 end 21 22 end 23 end
  • 50. padrino-support padrino をサポートするためのライブラリ集 String の拡張 ( colorize, pluralize ) や 国際化対応用のyamlファイルが置いてある # 一部のメソッドは ActiveSupport のものをそのまま利用している
  • 52. まとめ Padrino とは、 Sinatra の簡潔さを保ちつつ、 複雑なアプリケーション開発に必要となるような機能を 必要なときに付け加える事ができるようにした Webアプリケーションフレームワーク Agnostic ORMやテンプレートエンジンなどを自由に組み合わせ可能 Mountable 小さなRackアプリケーションを自由に組み合わせ可能
  • 53.
  • 54. 第2部 Padrino を使った開発の実践 Padrino で開発を行う際のTipsや 問題の解決方法などを説明します。
  • 56. Padrino のエコシステム - Rackミドルウェア - rack-contrib - Sinatra の機能拡張 ( SinatraExtention ) - sinatra-contrib - Padrino の機能拡張 ( Padrino 用の SinatraExtention ) - padrino-contrib - Padrino のプラグイン機能 - padrino-recipes に公式のレシピが公開されている
  • 57. Padrino のエコシステム - Rackミドルウェア - rack-contrib - Sinatra の機能拡張 ( SinatraExtention ) - sinatra-contrib - Padrino の機能拡張 ( Padrino 用の SinatraExtention ) - padrino-contrib - Padrino のプラグイン機能 - padrino-recipes に公式のレシピが公開されている
  • 58. Padrino のプラグイン機能 ( Templates ) プロジェクトの作成手順が記述されたテンプレートファイルを元に 新しいPadrinoプロジェクトを生成することができる $ padrino g project sample --template path/to/my_template.rb
  • 60. Padrino のプラグイン機能 ( Plugins ) レシピファイルを元に、 既存のPadrinoプロジェクトに機能追加が行える $ padrino g plugin path/to/my_plugin.rb
  • 62. その他 - OmniAuth, Warden - jpmobile, Browser - will_paginate, Kaminari - Better Errors #=> Sinatra で使えるものは普通に使える - padrino-pipeline, padroni-assets #=> Padrino に特化したものもある
  • 64. Padrino を使っていくと遭遇する問題 - コードの肥大化 - 各種コマンドでの起動が遅くなる - 開発サーバ起動後はリローダーが何とかしてくれるが… - Spring は Rails用だし Spork はメンテされていない - Sinatra の哲学に従い小さな部品に分割できないか - サブアプリケーション - アプリケーションの gem 化
  • 67. Padrino の情報源 ( 公式ページ )
  • 68. Padrino の情報源 ( 公式ドキュメント )
  • 70. Padrino の情報源 ( 書籍・雑誌 )
  • 71. Padrino の情報源 ( るびま ) 0036号
  • 72. Padrino の情報源 ( その他 )
  • 73. Padrino の情報源 ( その他 )
  • 74. Padrino の情報源 ( その他 )
  • 75. Padrino の情報源 ( コード )
  • 76. Padrino の情報源 ( idobata ) Padrino について雑談できる場所が欲しかったので作った https://idobata.io/organizations/padrino-framework-jp/rooms/public/join_request/ 5b2dda52-c818-45f2-82d6-04c891cb2350
  • 78. Padrino の今後 Padrino 1.0 へ向けて - マルチスレッドのサポート - 新しいルーターの導入 - PadrinoAdmin の刷新 - ページネーション、検索・フィルタ、ダイナミックなUI など - リファクタリング - リローダー、ロガー - ドキュメントの整備 依存を少なく、より堅牢でより高速なフレームワークを目指す Rack2.0, Sinatra2.0 の動向も注目
  • 81. Padrino への貢献 - ドキュメント - コードの中、公式ドキュメント、日本語 - プラグイン - 動かないものへのパッチ、自分の欲しいもの - gem - Rackミドルウェア、SinatraExtention、Padrino専用 - コード - コメント修正、バグ修正、新機能の提案
  • 82.
  • 85.
  • 86.
  • 87.