Crystalで幸運を – バグの減少、パフォーマンス向上、驚異的な生産性
Paul Smithは1年前にLuckyウェブフレームワークを作成しました – そして今、その現状を共有します。自身のプロジェクトを共有したい場合は、ご連絡ください。
LuckyはCrystalで書かれたフル機能のウェブアプリケーションフレームワークです。Luckyを使用すると、型安全なクエリ、ルーティング、レコード保存により、テスト数が減り、バグも少なくなります。その節約された時間で、最高のアプリ開発に集中できます。
1週間目から1000週間目まで
ほとんどのフレームワークでアプリを始める時、私は希望に満ちています。製品の可能性が見えて、最初の数週間の進捗状況から、物事が驚くほどスムーズに進むでしょう。
月日が経ち…
製品の素晴らしい未来への希望は、最新のコミットが何も壊さないという希望に変わります。
アプリを改善する方法よりも、変更によってバグが発生する可能性に重点を置くようになりました。あらゆる問題になりうることを考え、テストを書いて実行します。シンプルで分かりやすく保つことがますます難しくなります。
Luckyはアプリ開発に集中できるようにします
物事がうまくいかない可能性のあるあらゆることにエネルギーを費やす代わりに、コンピュータに助けを求めましょう。結局のところ、それがコンピュータの仕事です。
Luckyのルート処理、レコード保存、およびクエリはすべて型安全です。設定でさえコンパイル時にエラーが発生するため、依存関係のアップグレード時に誤って何かを壊したかどうかを知ることができます。
これにより、迅速で信頼性が高く、価値のあるウェブアプリケーションで顧客を喜ばせる方法に集中できます。
では、Luckyは他のフレームワークでは検出されないバグをどのように検出するのでしょうか?
型安全なクエリ
名前が「kat」を含むすべてのユーザーを取得したいとしましょう。Luckyでの方法は次のとおりです。
# Will find users with the name "Kathryn", "Katy", etc.
UserQuery.new.name.ilike("kat%")
Luckyでは、列の型に固有のメソッドが取得できます。lower
やilike
のようなメソッドは、文字列列でのみ使用できます。誤って整数列でlower
を呼び出そうとすると、Luckyはコンパイル時にそれを知らせます。name
列の名前をfull_name
に変更すると、Luckyはコンパイル時にその変更が必要な場所をすべて表示します。
nil
をnil
を許可しない列に渡そうとすると、Luckyはコンパイル時にそれを知らせます。そのため、恐ろしい論理エラーやnil
エラーを回避できます。
HTTP動詞をもう気にする必要はありません
Railsで最も厄介な問題の1つは、パスが正しい場合でも、リンクの正しいHTTPメソッドを設定し忘れることです。
コメントを削除する例を以下に示します
link_to "Delete", comment_path(@comment)
問題は分かりますか?パスは正しいのですが、HTTP動詞を指定し忘れていました。これは、ウェブ開発やRESTに慣れていないチームメンバーにとって特に混乱を招きます。
Luckyでは、HTTP動詞はリンク、フォーム、ボタンで自動的に使用されます。考える必要すらありません。ただ動作します。
正しい動詞(DELETE)が自動的に設定されます
link "Delete comment", to: Comment::Delete.with(@comment.id)
アクション内の条件式の欠落を検出する
このような条件式を持つアクションがあるとします
class SamlSignIns::Create < BrowserAction
action do
if user.present? && sso_enabled?
redirect to: SamlSignIns::New
elsif user.present? && !sso_enabled?
flash.info = "This email address does not have SSO enabled"
redirect to: SignIns::New
end
end
end
Luckyはバグを検出し、適切な方向に導くための役立つメッセージを提供します
SamlSignIns::Create returned Lucky::Response | Nil, but it must return a Lucky::Response.
Try this...
▸ Make sure to use a method like `render`, `redirect`, or `json` at the end of your action.
▸ If you are using a conditional, make sure all branches return a Lucky::Response.
この場合、ユーザーにアカウントが見つからないことを知らせるelse
条件を追加し忘れました。Luckyは、この解決策に向けて導くのに十分なほど役立ちます。
これは、Luckyが最高のアプリ開発に集中するのに役立つ機能のごく一部です。「なぜLuckyなのか?」と「Luckyの設計:堅牢なアクションとルーティング」で詳細をご覧ください。
Luckyを試してみましょう
私たちは、人々がよくある落とし穴を避け、プロジェクトを何年も楽しんでプログラミングできるようにLuckyを設計しました。Luckyに興味がある場合は、GitHubでスターをつけてください、ガイドをご覧ください、またはLuckyを特別なものにする理由についてさらに詳しく知ってください。楽しいコーディングを!