Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MiniMagickの型を生成したい
Search
a_fujisaki
August 01, 2024
Programming
0
84
MiniMagickの型を生成したい
a_fujisaki
August 01, 2024
Tweet
Share
More Decks by a_fujisaki
See All by a_fujisaki
rails newと同時に型を書く
aki19035vc
6
790
“Rails × 型”での2年間を振り返る
aki19035vc
2
1k
rbs-inlineを使ってみた
aki19035vc
0
610
Emacs × LSP × Steep
aki19035vc
0
150
最近追加した型の紹介とその振り返り
aki19035vc
0
500
Other Decks in Programming
See All in Programming
Rails アプリ地図考 Flush Cut
makicamel
1
130
未経験でSRE、はじめました! 組織を支える役割と軌跡
curekoshimizu
1
140
CloudNativePGを布教したい
nnaka2992
0
110
複数のAWSアカウントから横断で 利用する Lambda Authorizer の作り方
tc3jp
0
110
コードを読んで理解するko build
bells17
1
110
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
210
Honoとフロントエンドの 型安全性について
yodaka
7
1.4k
color-scheme: light dark; を完全に理解する
uhyo
7
490
クリーンアーキテクチャから見る依存の向きの大切さ
shimabox
5
960
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
670
Serverless Rust: Your Low-Risk Entry Point to Rust in Production (and the benefits are huge)
lmammino
1
150
仕様変更に耐えるための"今の"DRY原則を考える
mkmk884
9
3.2k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
22
1.4k
A designer walks into a library…
pauljervisheath
205
24k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Faster Mobile Websites
deanohume
306
31k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Making Projects Easy
brettharned
116
6k
Statistics for Hackers
jakevdp
797
220k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
Designing for humans not robots
tammielis
250
25k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Transcript
MiniMagickの型を生成したい Roppongi.rb#21 2024-08-01 @aki19035vc
自己紹介 ❏ 藤崎 亮人 ❏ @aki19035vc ❏ 所属: イタンジ株式会社 ❏
バックエンドエンジニア ❏ 不動産物件データベースの基盤開発 ❏ 学生の頃からEmacs使ってます
今日話すこと ❏ MiniMagickの型の話 ❏ MiniMagickの基本的な型の追加と困ったこと ❏ ImageMagickのドキュメントから型を生成するGemの紹介 ❏ https://github.com/aki19035vc/rbs_mini_magick ※
前回の Roppongi.rb#20 で話した内容の続き ※ 型についての基本的な解説はしません
なぜMiniMagickに型をつけるのか ❏ 業務で書いているRailsアプリケーションでは型をほぼ100%書いている ❏ MiniMagickの型がなかったので、必要な部分は自前で書いていた ❏ 他のRailsアプリケーションでも使いたい事もある ❏ せっかくなのでコミュニティに還元していきたい
そもそもMiniMagickとは ❏ ImageMagickという画像を扱うソフトウェアのRubyバインディング ❏ 画像をリサイズしたりフォーマットを変換したりできる $ magick mogrify -resize 100x100
-format png -write output.png input.jpg require "mini_magick" image = MiniMagick::Image.open("input.jpg") image.resize "100x100" image.format "png" image.write "output.png"
MiniMagickの基本的な型を追加した ❏ MiniMagickのソースコードを読んで型を書く ❏ 人力型推論なので意外と大変 ❏ gem_rbs_collectionにPRを出す (自分でマージできる) ❏ 4.13:
https://github.com/ruby/gem_rbs_collection/pull/616 ❏ 5.0 : https://github.com/ruby/gem_rbs_collection/pull/629
困ったこと ❏ method_missing で黒魔術してる ❏ ImageMagickのコマンドを作るDSLが提供されているイメージ ❏ 使用可能なオプションが何百と存在するため、それら全てをメソッドとして定義するのは大 変 module
MiniMagick class Tool def method_missing(name, *args) option = "-#{name.to_s.tr('_', '-')}" self << option self.merge!(args) self end end end image.resize "100x100" image.format "png" image.write "output.png" #=> これらのメソッドは定義されていない
ドキュメントから型を生成する Gemを作った ❏ プロジェクトのsigディレクトリにMiniMagickの型を出力する ❏ 内部的にはImageMagickのhelpオプションで出力されるusageを使用 している ❏ インストールされているImageMagickのバージョンで利用できる オプションに応じた型を生成できる
(はず) $ bundle exec rbs-mini-magick generate https://github.com/aki19035vc/rbs_mini_magick
None
今後やりたいこと ❏ MiniMagickの5系以外のバージョンへの対応 ❏ 今はMiniMagick 5.0 しか対応していない (5.0は最近出たばかり) ❏ 最低でも4.13には対応したい
❏ 複数バージョンに対応できるようには作ってはある ❏ ImageMagickの7.1 系以外でも正しく動くことを確認 ❏ 今はImageMagick 7.1 でした動作確認をしていない ❏ 最低でも7.0では動くことを確認したい (6.9は気が向いたら) ❏ 業務で使用しているRailsアプリケーションの型検査で使ってみる