Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
step-to-rails-ex-paperclip
Search
ttwo32
January 09, 2017
Technology
84
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
step-to-rails-ex-paperclip
study paperclip
ttwo32
January 09, 2017
Other Decks in Technology
See All in Technology
継続的なAIコスト最適化
bgpat
1
340
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
140
夫婦で子育てするための育児標準化
codmoninc
PRO
0
330
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
190
USB PDを使ってスマホを労わりたい
raspython3
0
180
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
490
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
260
『SAR衛星データ解析入門』のご紹介とその応用
syuchimu
0
120
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
WasmをRustにする
sansantech
PRO
0
250
Local CI × GitHub Actions
gogutan
2
190
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
150
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
Facilitating Awesome Meetings
lara
57
7.2k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Optimizing for Happiness
mojombo
378
71k
YesSQL, Process and Tooling at Scale
rocio
174
15k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
520
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Transcript
Paperclip @ttwo32 Step-to-Rails-Expert.rb Jan.31th 2016
⾃⼰紹介 • IT系コンサル会社で社内SEやってます。 • ずっとフロントエンド中⼼にやってきた感じです。(Java歴が ⻑くてPHPは少しかじった程度) • Ruby歴は3年くらいです。(結構経ったな・・・) • holidaysっていうgemをメンテしてます。よかったら使ってく
ださいJ
Paperclipってなに? • 有名なファイルアップロード⽤のgem。⼀応file attachment librariesとのことなので画像以外も添付できるはず。 • Github => https://github.com/thoughtbot/paperclip •
8282 stars at Jan.6.2017 • 公式サイト? => https://thoughtbot.com/tools • Thoughtbot社(Factory_girlとか作った会社)なのでメンテは続きそ う。
Requirements • Ruby and Rails • Ruby >= 2.1 •
Rails >= 4.2 • imagemagick 画像処理(多分リサイズやサムネイル作成等)で必要。今回はテーマが画像な ので必須。 • File content_typeのチェックにfileコマンドの機能が必要。Unix系のOSなら特に考 慮する必要なさそう。Windows系はRubyinstallerのdevelopment-kitが必要。
Installation • include rails gems gem "paperclip” bundle install •
imagimagick • brew install imagemagick *sierraにしたせいかinstallに失敗したけどbrew updateして無事解決。
Quickstart • railsプロジェクト作成。 • rails new picture • 適当にmodel作る。 •
rails g scaffold user name:string password:string • avatarという名前でpaperclip⽤のカラムを作る。 • rails generate paperclip user avatar • paperclip⽤に以下の4カラムが追加される。 • avatar_file_name • avatar_file_size • avatar_content_type • avatar_updated_at
Quickstart • model修正 class User < ActiveRecord::Base has_attached_file :avatar, styles:
{ medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\z/ end • _form.html.erbの適当な位置にfile_upload⽤のフィールドを追加 <div class="field"> <%= f.label :avatar %><br> <%= f.file_field :avatar %> </div>
File upload execution • アップロードしたファイルは以下の場所に配置されている。⼀ つのファイルに対して縮⼩画像とサムネイル画像を同時に作る らしい。 public └── system
└── users └── avatars └── 000 └── 000 └── 001 ├── medium │ └── example_image1.jpg ├── original │ └── example_image1.jpg └── thumb └── example_image1.jpg なお画像以外のファイルでも imagemagickの処理は通るみたいで 同様のフォルダ構成になる。
validation • validationは3種類⽤意(size,content_type,必須)されている。 • validates_attachment_size • validates_attachment_presence • alidates_attachment_content_type •
ʻvalidates_attachmentʼを使えば複数のチェックを1カラムに まとめて設定することが可能 validates_attachment :avatar, presence: true, content_type: { content_type: "image/jpeg" }, size: { in: 0..10.kilobytes }
resizing • has_attached_fileのstyle optionで指定する class User < ActiveRecord::Base has_attached_file :avatar,
styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\z/ end • view側でそれぞれのサイズを取得するのは下記の通り。 • <%= image_tag @user.photo.url %> • <%= image_tag @user.photo.url(:thumb) %> • <%= image_tag @user.photo.url(:medium) %>
Prevent thumnail generation for invalid uploads. • ʼ before_post_processʼを指定すれば、paperclipの処理(サム ネイル作成処理等)の前に実⾏するチェックして処理を⽌める
ことも可能。(指定しないとinvalidになってもサムネイル作成 処理が実⾏されるらしい) (ファイルサイズの制限をする時の例) before_post_process :check_file_size def check_file_size valid? errors[:image_file_size].blank? end
Hashing • ファイル名にハッシュ値を使うことができる。 defaultではハッシュ 値を使わないので、URLにファイル名がそのまま表⽰される。 <実装> • initializerに以下のファイルを置いてサーバ再起動すればOK. # config/initializers/paperclip_defaults.rb
Paperclip::Attachment.default_options.update({ url: "/system/:class/:attachment/:id_partition/:style/:hash.:extension", hash_secret: Rails.application.secrets.secret_key_base })
最後に • 導⼊から利⽤開始まで⾮常に簡単。触ったことのない⽅は是⾮⼀度 試して⾒てください。 • ここでは取り上げていませんが、File storageとしてS3をサポート しているみたいです。ちなみにHerokuもFile storageにはS3を推奨 してるっぽいです。
https://devcenter.heroku.com/articles/paperclip-s3 • Imagemagick optionを使ってサムネイルの最適化もできるようなの で、使い⽅はかなり多岐に渡りそう。 https://github.com/thoughtbot/paperclip/wiki/Thumbnail- Generation#optimizing-thumbnails-for-the-web
参考 • https://github.com/thoughtbot/paperclip/wiki • http://qiita.com/kakipo/items/4e70428e46f60c74ea63 • http://ruby- rails.hatenadiary.com/entry/20140716/1405443484