Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
言語は違うけどもインスパイアされて
作られたとあるライブラリ
〜 PaperclipとLaravel-stapler 〜
自己紹介
✦
今までの仕事履歴(本業)
石川県金沢市生まれ
本業はサーバーサイドのプログラマ ※Rails&PHP使い
26歳〜31歳:Ruby / PHPのプログラマ
23歳〜25歳:Webデザイナー兼ディレクター
最近はiOSアプリ開発にも...
これまでつくったもの(2015年)
① 簡易家計簿アプリ「Coffre」
② ゲームアプリ「10秒虫食い算」
・カレンダーを自作しています
・シンプルなお小遣い帳感覚で支出管理できます
・全問正解者ほとんどいません…
・不定期ですがコラムも書い...
ざっくり2つのライブラリについて復習
�(この2つを実装してみて感じたこと)
モデルの書き方や画像情報カラムのもち方・View側での実装方法ともに非常によく似ていたので驚いた!
✦ PaperclipとLaravel-staplerに関しての紹...
調べた経緯とか様々な事情
�(言語をまたいだ壮大な浮気癖の結果)
結果的には色々調べることになったので勉強にはなった!結果オーライ!だけども今も迷っている現実…
✦ 2014年にLaravelを個人的に少し触った&Railsの現場が動機
201...
Qiitaにも書いてまとめてみたりした
(過去にも記事をまとめてはみたけれどAWS側の部分は未検証)
今回は2014年のAdventCalendarでは書けずじまいだった部分も触れて見ていきたいと思います。
✦ 実際のアプリケーションを作る際の...
実際に似ている部分と違う部分①
�(LaravelのMVCのファイル置き場)
Model → app/配下 , View → resources/views/配下 , Controller → app/Http/Controllers/配下
✦...
実際に似ている部分と違う部分②
(見比べをしてみると動かすのに必要な追加カラムの規則は似ている)
フレームワークの構成は違うがさすがはインスパイアされてつくられているのでDBまわりはすごく近い!
✦ マイグレーション後のカラムの持ち方は非常に似...
実際に似ている部分と違う部分③
✦ モデルの設定部分は非常に良く似ている
�(パスの書き方や画像サイズの部分)
見比べをしてみると「意外に似ているぞ?」と感じる部分が結構ある&Paperclipの流れにも沿ってる感。
Ruby on Rails...
実際に似ている部分と違う部分④
✦ AWS S3に関する設定は違う部分がある
�(AWSの設定に関して)
かなり危険?な部分を扱うのでGithubなどのサービスに入れておく際には十分にご注意をお願いします。
② app/config/内にs3....
Ruby on RailsでもLaravelでもサービスを作って公開までこぎつけたい!と思いますーm(_ _)m
✦
Laravel-staplerはPaperClipにインスパイアされているので言語は違えども思想
が非常に良く似ている
セッシ...
Upcoming SlideShare
Loading in …5
×

言語は違うけどもインスパイアされて作られたとあるライブラリ(PaperclipとLaravel-stapler)

859 views

Published on

雑兵Meetup #4の発表資料になります。

画像やファイルのアップロード機能を実装するのに有名なRuby on RailsのGemの1つである「PaperClip」があります。またPHPでも最近の注目度が上がりつつあるPHPフレームワークLaravelのライブラリでPaperClipにインスパイアされて作られた「Laravel-stapler」があります。

Ruby on RailsもPHPもやっていたこともあり、今回はこの2つのライブラリの実装の見比べについてまとめてみました。

Published in: Technology
  • Be the first to comment

言語は違うけどもインスパイアされて作られたとあるライブラリ(PaperclipとLaravel-stapler)

  1. 1. 言語は違うけどもインスパイアされて 作られたとあるライブラリ 〜 PaperclipとLaravel-stapler 〜
  2. 2. 自己紹介 ✦ 今までの仕事履歴(本業) 石川県金沢市生まれ 本業はサーバーサイドのプログラマ ※Rails&PHP使い 26歳〜31歳:Ruby / PHPのプログラマ 23歳〜25歳:Webデザイナー兼ディレクター 最近はiOSアプリ開発にも絶賛浮気中! 趣味:シルバーアクセサリー集め・スイーツ作り・開発 女子向け・グルメ・エンタメ関連のお仕事が多い&最近はRailsやLaravelも Qiita : http://qiita.com/fumiyasac@github Github : https://github.com/fumiyasac ✦ 酒井文也(さかい ふみや) 東京(大塚)住まいの31歳 こんな格好してますが… 遊び人ではなくエンジニアです お酒好きそうと思われますが… ビールが全く飲めません キャリアのほうは… 結構ブランクあったりとベッコベコです ※心の叫び❶ ※心の叫び❷ ※心の叫び❸
  3. 3. これまでつくったもの(2015年) ① 簡易家計簿アプリ「Coffre」 ② ゲームアプリ「10秒虫食い算」 ・カレンダーを自作しています ・シンプルなお小遣い帳感覚で支出管理できます ・全問正解者ほとんどいません… ・不定期ですがコラムも書いています ・サーバーサイドはRuby on Railsを使用 http://www.coffre.me/ ・デザインにもこだわってみました(特にグラフ) ・実はちょっとバグがあります。 ・問題は今後追加予定(現在110問収録) 個人的にはなりますが、他にもアプリ・Webサービスなど開発中です(2016年も宜しくお願いします) ・サイト等は次回のアップデートで公開予定 http://blog.just1factory.net/services/284 ・若干の中毒性を含みます
  4. 4. ざっくり2つのライブラリについて復習 �(この2つを実装してみて感じたこと) モデルの書き方や画像情報カラムのもち方・View側での実装方法ともに非常によく似ていたので驚いた! ✦ PaperclipとLaravel-staplerに関しての紹介 ① Paperclip(Ruby on Rails ※Ruby) ・ファイルアップロード機能を追加するGem ② Laravel-stapler(laravel ※PHP) ・同様の機能を持つGemにCarrierWaveがある(PaperClipと並ぶ有名Gem) ・作者が「inspired by Paperclip」と認めている(前身はstaplerという名前) ・まだまだ日本語のまとめ資料が少ないがドキュメント自体は充実 ・herokuの公式ページにも英語で解説がある ・Amazon S3との連携も結構しやすい&解説しているブログも多い ・(公式リポジトリ)https://github.com/thoughtbot/paperclip ・書き方のノリはPaperClipと非常によく似ている(Amazon S3との連携も可) ・ちなみにstaplerは日本語では「ホッチキス」のこと ・(公式リポジトリ) https://github.com/CodeSleeve/laravel-stapler
  5. 5. 調べた経緯とか様々な事情 �(言語をまたいだ壮大な浮気癖の結果) 結果的には色々調べることになったので勉強にはなった!結果オーライ!だけども今も迷っている現実… ✦ 2014年にLaravelを個人的に少し触った&Railsの現場が動機 2014年のAdventCalendarでも少しだけ触れてみたことから始まった… 新しいフレームワークに挑戦しようと思いlaravalを触る <変遷の歴史> ・2014年7月(CakePHPでの現場) ・2014年10月〜2015年4月(Ruby on Railsでの現場) 家計簿アプリ「Coffre」の作成でサーバーサイドをRailsにする (この時にPaperclipを使った) ・2015年5月〜現在まで(PHP / Rubyでの現場) 2015/03/11にCoffre無事にリリース! LaravelのAdventCalendarを初めて書く SwiftとLaravel5でAdventCalendarを書く Qiitaも書き始める(ほとんどSwiftとLaravel ※Railsも少し) 何が本職なのか自分でもわからなくなる暗黒時期が到来する�←�イマココ RailsもLaravelも両方使って色々しよ! これは面白そうだ!と思ったので調査!
  6. 6. Qiitaにも書いてまとめてみたりした (過去にも記事をまとめてはみたけれどAWS側の部分は未検証) 今回は2014年のAdventCalendarでは書けずじまいだった部分も触れて見ていきたいと思います。 ✦ 実際のアプリケーションを作る際の手順や実装に関しての記事 ① Paperclip(Ruby on Rails ※Ruby) ・PaperclipとAWS S3を用いた画像アップロード機能作成手順まとめ ② Laravel-stapler(laravel ※PHP) ・Laravel5.1で作るファイルアップロードライブラリLaravel-Staplerの利用方法&AWS S3との連携Tips (Qiita記事URL)http://qiita.com/fumiyasac@github/items/a73d3598d75e749ba443 (Qiita記事URL)http://qiita.com/fumiyasac@github/items/320f80dcab492b3e31ab ※Rails4.1 & macportsを使っているのでもしかしたら参考にならないかも… ※LTSの5.1系を用いて解説をしています。 ・AWS S3側の設定はそれぞれ同じ設定を使っています。 ・AWSとの繋ぎこみは aws-sdk (Rails)・aws-sdk-php ※version2 (Laravel) を使います。 http://blog.just1factory.net/programming/201 (過去記事)画像アップロードのお話と僕が作っているもの [for Laravel Advent Calendar 2014]
  7. 7. 実際に似ている部分と違う部分① �(LaravelのMVCのファイル置き場) Model → app/配下 , View → resources/views/配下 , Controller → app/Http/Controllers/配下 ✦ app/以下のフレームワークの構成はそもそも違っている Ruby on Rails (Ver4.1) Laravel (Ver5.1 LTS) MVC感がある MVC感がなさそうに思うかも 注意) Repositoriesは自前で 追加したものです。。
  8. 8. 実際に似ている部分と違う部分② (見比べをしてみると動かすのに必要な追加カラムの規則は似ている) フレームワークの構成は違うがさすがはインスパイアされてつくられているのでDBまわりはすごく近い! ✦ マイグレーション後のカラムの持ち方は非常に似ている Ruby on Rails (Ver4.1) Laravel (Ver5.1 LTS) db/migrate/(timestamp)_add_attachment_image_newinfo.rb class AddAttachmentImageToNewinfos < ActiveRecord::Migration def self.up change_table :newinfos do |t| t.has_attached_file :image end end def self.down drop_attached_file :newinfos, :image end end database/migrations/(timestamp)_create_newinfos_table.php <?php use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class CreateNewinfosTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { //newinfosテーブルを生成する Schema::create('newinfos', function(Blueprint $table) { … (スキーマの定義は省略) //Add columns for Laravel Stapler $table->string('image_file_name', 256); $table->string('image_content_type', 256); $table->integer('image_file_size'); $table->timestamp('image_updated_at'); … (以下略) newinfosテーブルにカラムをあとで追加するマイグレーション カラム追加用のマイグレーションを あとで追加してもOKです。 "image_file_name" varchar型, "image_content_type" varchar型 "image_file_size" int型 "image_updated_at" datetime型 #ファイル名 #ファイルの種類 #ファイルサイズ #アップロード日 <どちらにも追加が必要なカラム名とデータ型>
  9. 9. 実際に似ている部分と違う部分③ ✦ モデルの設定部分は非常に良く似ている �(パスの書き方や画像サイズの部分) 見比べをしてみると「意外に似ているぞ?」と感じる部分が結構ある&Paperclipの流れにも沿ってる感。 Ruby on Rails (Ver4.1) Laravel (Ver5.1 LTS) app/models/newinfo.rb class Newinfo < ActiveRecord::Base … (色々とごにょごにょする部分は省略) #添付ファイルアップロードに関する設定 has_attached_file :image, :styles => { :thumb => "100x100#", :medium => "200x200#", :large => "640x320#" }, :storage => :s3, :s3_permissions => :private, :s3_credentials => "#{Rails.root}/config/s3.yml", :path => ":class/:attachment/:id/:style.:extension" end app/Newinfo.php (クラスへの追記部分はQiitaを参考にしてください) protected $fillable = [‘カラム名色々...’, ‘image’]; //コンストラクタ public function __construct(array $attributes = array()) { //画像の投稿設定 $this->hasAttachedFile('image', [ //画像の切り取るサイズのパターン 'styles' => [ 'large' => '640x480#', 'medium' => '300x200#', 'thumb' => '100x75#' ], //AWS S3内での画像の「格納場所」とURLの設定 'url' => '/uploads/newinfos/:id/:style/:filename', 'path' => '/uploads/topics/:id/:style/:filename', //設定ファイル移動場所:config/laravel-stapler/s3.php 'storage' => 's3' ]); parent::__construct($attributes); } サイズの設定の参考 http://blog.noriaki.me/2014-01-02-rails4- paperclip-imagemagick-thumbnail-styles
  10. 10. 実際に似ている部分と違う部分④ ✦ AWS S3に関する設定は違う部分がある �(AWSの設定に関して) かなり危険?な部分を扱うのでGithubなどのサービスに入れておく際には十分にご注意をお願いします。 ② app/config/内にs3.ymlを追加 bucket: 自分のつくったバケット名 access_key_id: アクセスキーID secret_access_key: シークレットキー s3_host_name: ホスト名 ③ app/config/initializers内にpaperclip.rbを追加 Paperclip::Attachment.default_options[:url] = ‘xxx' Paperclip::Attachment.default_options[:path] = 'xxx' Paperclip::Attachment.default_options[:s3_host_name] = 'xxx' ① Gemfileに下記を追加してbundle installをする gem "paperclip", '~> 4.3' gem 'aws-sdk', '< 2.0’ $ bundle install Ruby on Rails (Ver4.1) Laravel (Ver5.1 LTS) 下記Gemfileまわりの設定手順 Composer.jsonとconfigファイルの設定手順 ② config/laravel-stapler/s3.phpに設定を追記する $ php artisan vendor:publish $ vim config/laravel-stapler/s3.php ・S3 Client Config ・S3 Object Config ・S3 Path のそれぞれの値を設定する ※aws-sdk-phpの設定値に関しては下記を参照してください。 http://docs.aws.amazon.com/aws-sdk-php/v2/api/index.html "codesleeve/laravel-stapler": "1.0.*", "aws/aws-sdk-php": “2.4.*" $ composer update ① composer.jsonに下記を追加してupdateをする
  11. 11. Ruby on RailsでもLaravelでもサービスを作って公開までこぎつけたい!と思いますーm(_ _)m ✦ Laravel-staplerはPaperClipにインスパイアされているので言語は違えども思想 が非常に良く似ている セッションのまとめ ✦ AWS S3側の設定方法は試して見ると大体同じでいけた ※自信ないけど。。 ✦ Laravel-staplerもPaperClipもGithubでの解説やドキュメントはかなり多くあるの で実装もしやすい ※Laravel-staplerに関しては日本語は少ない ✦ モデルの設定やファイル情報に関する追加カラムの持ち方・View部分の実装方法 についてはインスパイアされた片鱗を感じることができる ご静聴ありがとうございました! ✦ aws-sdk / aws-sdk-phpを使ってAWS S3へアップロードする ✦ 仕様にもよるでしょうけど、どちらも結構導入しやすい&使いやすい!

×