サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブラックフライデー
zenn.dev/takahashim
「大きなメソッドは細かく分割しよう」「外部から使わないメソッドはpublicにしない方がいい」といったコーディングのアドバイスに従って、とりあえずprivateメソッドを増やしていった場合に陥りがちなパターンです。 確かに巨大なメソッドばかりのクラスに比べると、メソッドは適宜分割されている方がマシですが、ここで安心するべきではありません。そのうち収拾がつかなくなります。 典型的な症状 クラスのソース行が長く、メソッドが多い privateメソッドの方がpublicメソッドよりずっと多い privateメソッドの粒度や処理内容がバラバラで追いかけにくい 似たような名前のprivateメソッドが並んでいる 生じる問題 可読性が低くなる いろんな責務が混在しているため、メソッド間の依存関係がわかりにくくなります。 テストが困難になる 内部ロジックにアクセスする手段がなくなるため、無理やりpriv
Railsのdelegateメソッドは便利ですよね。 https://railsguides.jp/active_support_core_extensions.html#delegate https://api.rubyonrails.org/classes/Module.html#method-i-delegate Rails以外のRubyコードでもdelegateを使いたくなりますが、そのためにActiveSupportを導入するのもちょっと…という場合のために、シンプルなモジュールを作ってみます。 使い方 Delegatableというモジュールにしてみます。クラスの中でextend Delegatableすると、そのクラス内でdelegateメソッドが使えるようになります。 以下のように使えるものです。 delegate :metohd1, :method2, ... method
Railsの小ネタです。 Railsのキャッシュストアとして:redis_cache_storeを指定すると、Redisにキャッシュさせることができます。 config.cache_store = :redis_cache_store, { url: ENV["REDIS_URL"] } これが正しく設定されているかどうかを確認する方法です。 キャッシュストアに何が使われているか調べる Rails consoleでRails.cacheをみると、キャッシュストアの設定が確認できます。
先日某所で「最近プログラミングを始めた入門者(だったかな?)に勧められるオブジェクト指向の本を教えてほしい」みたいな質問をいただいたのですが(うろ覚えなのでちょっと違っているかも)、その場で即答できず考え込んでしまいました。ですが、遅ればせながら選書してみたので、その内容をここに書いておきます。 とはいえ、改めて考えてみても、2023年に入門者向けのオブジェクト指向の本を探すのはなかなか難しいですよね…。もちろんオブジェクト指向じゃなければ簡単かと言われるとそういう訳でもないですが。とりわけオブジェクト指向に関する書籍の場合、海外のよく知られている書籍は少し前に翻訳されたものが多くて、最近はこれというのがなかなか思いつきません。また日本でも良書がばんばん出てるわけでもなさそうです。 この辺りは、オブジェクト指向に関する技術はもはや当たり前のものとなってしまっていて、今さら旬のトピックでもな
「開発抽象化レイヤー」とは 「開発抽象化レイヤー」(Development Abstraction Layer)はご存知でしょうか。 これはJoel Spolskyが言い出した言葉で、彼の2006年のエッセイのタイトルにもなっています。このエッセイは大変おもしろいので必読です。ご存じなかった方はいますぐ読むことをおすすめします。 日本語訳もInternet Archiveから読めます。 ちなみに組込み方面では「HAL」という用語があります。これは「Hardware Abstraction Layer」の略です。HALはハードウェアの違いを吸収することで、プログラマにはハードウェアを意識させないよう「抽象化」するためのものです(が、実際には「抽象化の漏れ」が生じやすくて微妙な話が展開されるようなのですが、それはまた別の話になります)。 この「開発抽象化レイヤー」も、実際にはプログラマーが活動
考えてみればソフトウェアパターンが賑やかだった時代からはすでに20年以上たっているわけで、20年も変わるといろいろ状況も変わりますし、そんな昔のことなんて知ってるわけない、というか知ったことではない、という人も少なくないと思います。 とはいえ今でも使われている用語について、その当時の使われ方を知ると、考察が深まることもあるかもしれません。 そんな感じでOOPとかパターン方面の用語とかを遡りたい! というときには、WikipediaとかではなくてC2 Wikiを見るのがおすすめです。 C2 Wikiとは Wiki(WikiWikiWeb)の元祖みたいなやつですね。iki-ikiで紹介されています。 例えばValue Objectについて掘りたい、と思った時にはValueObjectで探すと見つかります。単語と単語をつなげるときに、単語の先頭を大文字にする感じです。 とはいえ、C2 Wikiも
Tonicとは TonicはHTMLで使えるコンポーネントを作るための軽量フレームワークです。 上記サイトでは特徴として以下のようなものがあげられています。 1ファイル、1クラスのみ(HTMLエスケープ用文字列クラスもおまけっぽくついてます)。本体は350行程度。 ビルドツール不要 ネイティブWeb Componentsを使用 JAMStackにも最適 クライアントでもサーバでも同様に動作 コンポジション指向(?) Event delegation(イベント移譲)を標準でサポート サンプルも豊富 何をやっているかはソースを読んでいただいた方が早いかもと思いますが、本当にHTMLEelementを継承したTonicクラスを作ってるだけ、と言っても過言ではないでしょう。 ちなみに「サンプル豊富」というのは、Tonicで作った公式コンポーネント集のことだと思われます。 間違ってもSPAとかを作る
『Sustainable Web Development with Ruby on Rails』はRails使ってるなら絶対面白いと思う David Bryant Copelandの『Sustainable Web Development with Ruby on Rails』を読んでいますが、この本めちゃめちゃ面白いですね。 Railsの設計で悩んだことのある人なら絶対読んで損はないというか、共感したり反発したりにやにやしたりで楽しめると思います。RailsというかWebアプリ開発の歴戦の勇士(正直あまり若くなく、つらい経験を重ねてきた生き残り的な人)が語るベストプラクティス感があります。 本書の構成 大きく3部構成です。 Introduction その名の通り導入です。本書の目的、Railsのアーキテクチャの紹介と、ビジネスロジックの話など。 「Sustainable」とは何か? とい
(特にRubyに限った概念ではないですが、他の言語だと微妙に状況が違うかもしれないので、ここではRubyの例に限定しています。) 機能は追加・改修する際、すでにあるクラスだけでなんとかしようとすると、特定のクラスにあらゆる機能を持たせてしまったりしかねません。そうすると「神クラス」が誕生してしまいます。 典型的な症状 特定のクラスに、メソッドやインスタンス変数がやたらたくさんある状態になったりします ソースコードも当然のように長かったりします 機能追加・機能修正するのが困難なクラスがあったりします どんな機能の修正でもなぜか特定のクラスを修正しないといけなかったりします 生じる問題 壊れやすくなり、修正コストが激増します かんたんな修正であっても、(なぜか)他の機能が壊れたりします。 テストがあれば壊れたことに気づけるかもしれませんが、気づいたところで直すには手間がかかります。テストがなけ
ソフトウェアの内部では、データを様々な形に加工しつつ、あちこちに受け渡して再利用します。そのためのデータ構造として、RubyではHashクラスのオブジェクト(他の言語ではMapだったりDictionaryだったり連想配列だったりします)を使うことはよくあります。 単体の数値や文字列ではなく、それらを組み合わせたデータを扱う際には、Hashオブジェクトが便利です。 しかし、あらゆる場面でHashを駆使しようとすると、利便性よりも弊害が大きくなります。 典型的な症状 あちこちで同じだったりちょっと違ったりするHashオブジェクトを引き回していたりします インスタンス変数が少なく(あるいはまったくなく)、その代わりとしてメソッド引数のHashオブジェクトにいろんなデータを渡していたりします 1つのHashオブジェクトのキーとして、文字列やシンボル、さらにはそれ以外のクラスのオブジェクトが使われて
(Ruby初学者向けの啓蒙記事です。「クラスメソッドはクラスクラスのインスタンスの特異メソッドで云々」みたいな話が得意な人は対象外です。ご了承ください。) クラスメソッドは便利なこともありますが、使いすぎるとよくないコードになってしまいます。 少なくともRubyでは、クラスメソッドは比較的特殊なもので、普通のメソッドはインスタンスメソッドである、と考えるくらいのほうがいいと思います。 典型的な症状 クラス内に定義されているインスタンスメソッドがほとんどない、あるいはまったくないにも関わらず、クラスメソッドがたくさん定義されていたりします クラスメソッドからクラスメソッドの呼び出しが多用されたりします 上記と合わせて、クラスメソッドの引数が増えたりします 生じる問題 どこからでも呼べてしまう インスタンスメソッドはそのメソッドが所属するクラス(or そのサブクラス群)のオブジェクトからしか呼
Tailwind CSS for Railsを使って、NodeをインストールせずにTailwind CSS 3を導入する みなさんこんにちは。この記事はRuby on Rails Advent Calendar 2021の20日目の記事です。 20日は誰も埋めていなかったようなので(と言いつつもう日付も変わってしまっているのですが)、Tailwind CSS for Railsというgemについて書きます。 Tailwind CSSとRails Tailwind CSSは最近流行のCSSフレームワークで、Utility-Firstと呼ばれている思想に基づいています。これはある意味、従来のCSS設計のベストプラクティスの真逆を行くようなもので、class="flex items-baseline mt-4 mb-6 pb-6 border-b border-gray-200"みたいなスタイル
きしださんが先日もたのしいお題を投下されていました。 出遅れましたがこのネタについて少し掘り下げてみます。 念のため個人的なスタンスをあらかじめ表明しておくと、オブジェクト指向に対してはそれなりに好意的ですが、別に時代の最先端だとかソフトウェア開発に必須の知識というほどではない(でも知っておくと便利というか、知らないと不便なこともあるかもしれないのでわざわざ避けるのはおすすめしない)というくらい温度感です。 オブジェクト指向 is 何 そもそも「オブジェクト指向」という言葉自体、座りの悪い言葉です。 意味が明確なのは「オブジェクト指向プログラミング(OOP)」、「オブジェクト指向プログラミング言語(OOPL)」、「オブジェクト指向設計(OOD)」「オブジェクト指向分析(OOA)」といった「オブジェクト指向なんとか」の方で、それらをふわっとまとめた(ような気がする)単語が「オブジェクト指向」
Eric Evans "Domain-Driven Design Reference -- Definitions and Pattern Summaries" の日本語訳です。なかなか見直しと修正(推敲)が終わらないので、とりあえず公開してみます。 https://www.domainlanguage.com/ddd/reference/ ## 翻訳について パターン名については原則として『エリック・エヴァンスのドメイン駆動設計』(翔泳社)に合わせています。素晴らしい訳業に(元「DDD難民」の一人としても)記して感謝いたします。 ただし、「エンティティー」「メタファー」「レイヤー」「ファクトリー」など、末尾の音引きは省略せずに記することにしました。そのため、厳密には正確に同一ではありません(他にも「インタフェース」は「インターフェース」にしています)。ご了承ください。 ## 権利について
なんとなくパターン・ランゲージ(パターンカタログ)のスタイルが懐かしくなったので、あのスタイルを思い出しながら書いてみます。 目的 特定のアプリと完全に同期していますが、機能的には独立したライブラリをアプリ内のgemとして提供するものです。 動機 アプリで使いたい機能として、ある程度の独立した機能を実装したい 単独のクラスやモジュールとして実装できるものではなく、複数のクラス等が関連して動く程度の粒度を想定する(ので、個別のファイル単位よりはもう少し大きい粒度になる) 独立した機能とアプリが渾然一体となり、気がつくと境界を侵食したり侵食されたりしてしまうことは避けたい 適用可能性 いくつかのclassやmoduleがアプリケーションに依存せず、独立した機能になっている場合 特定のRailsアプリからしか使われる予定がない(共有する必要・予定がない)場合 一定期間しか利用せず、どこかのタイミ
なんかおすすめなテスト本ないですかねえ? と、某所で(テストをメインの業務にするのではなく)普通に開発をされている方に聞かれたので、 プログラミングは普通にできる テストについては学んだことはない とはいえテストエンジニアになるわけではなく、開発者としてテストが知りたい という人向けに、2021年現在で普通に入手できる本をいくつか挙げてみます。
(original: https://web.archive.org/web/19990208231552/http://www.vacia.is.tohoku.ac.jp/~s-yamane/hackersML/papers/manifesto-J.html ) サイファーパンク宣言 エリック・ヒューズ プライバシーは電子時代の開かれた社会にとって必要不可欠なものだ。プライバシーとは秘密主義のことではない。つまりプライベートな事柄というのは全世界には知らせたくない事柄だが、秘密の事柄とは誰にも知られたくない事柄だ。プライバシーは選択して自らを世界に示すための力なのだ。 もしも二つの集団が何か論争をおこなったとしよう。両者は議論を記録し、それぞれの集団はこの記録によって発言できる - 誰がそれを妨げるだろうか? たとえ記録を制限する法律ができたとしても、開かれた社会では発言の自由はプライバ
(original: https://web.archive.org/web/19980129140949/http://www.vacia.is.tohoku.ac.jp/~s-yamane/hackersML/papers/crypto-anarchy-J.html ) From: [email protected] (Timothy C. May) Subject: The Crypto Anarchist Manifesto Date: Sun, 22 Nov 92 12:11:24 PST 世界のサイファーパンクスへ、 昨日シリコンバレーでの「生身のサイファーパンクス」の集会で、 Cypherpunk メーリングリストのあらゆる読者層(幽霊メンバーや立ち聞きメンバーその他全員)が配布資料を電子的にも入手できるように、と数人が要求した。<ふう>[1]。 以下は私が1992年に私が設立
ES6風Hashリテラルとは ここで言う「ES6風Hashリテラル」というのは、ES6(ES2015)でobject property shorthandとして導入された省略記法です。 最近のJavaScriptを使っている人なら見慣れた記法ですね。Rubyでもこういう風に書けると便利そう、と思う人はもちろんいるわけで、この記法を取り入れるべく過去にもbugs.ruby-lang.orgで提案がありました。が、残念ながら今のところrejectされたままです。 Feature #11105 ES6-like hash literals https://bugs.ruby-lang.org/issues/11105 Feature #15236 add support for hash shorthand https://bugs.ruby-lang.org/issues/15236 似た記法
Railsにおける app/ とは app/はRailsのアプリケーション用ディレクトリで、普通のRailsアプリケーションでは、この下にmodels,controllers,viewsを含めた様々なディレクトリが作られます。 基本的には新しいディレクトリを追加する必要はないのですが、アプリケーションが複雑になると、Railsを拡張するべくここにアプリケーション固有のディレクトリを作って、その下に関連するファイルを置くことがあります。 中には、servicesやserializersのように、多くのRailsアプリケーションで見られるものもあれば、完全にアプリケーション独自のものが作られることもあります。また、アプリケーションによっては独自のディレクトリは一切作らないものもあれば、大量に作るものもあります。それぞれアプリケーションの開発方針によるものです。 本記事では、比較的有名なOSSの
このページを最初にブックマークしてみませんか?
『takahashimさんの記事一覧』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く