タグ

ブックマーク / r7kamura.com (18)

  • vscode-ruby-light開発日記 - Prismパーサー導入編

    vscode-ruby-lightの開発中に考えたことを書いていきます。今回は、内部で利用しているRuby用パーサーのtree-sitter-rubyからPrismへの移行について書きます。 @ruby/prismパッケージの概観 Prismは、JavaScriptからもその実装を利用できるよう、@ruby/prismという名前でnpmパッケージを公開しています。 何が含まれているパッケージなのかというと、まずWASMバイナリという形でコンパイルされたPrismの実装と、それを便利に使うためのJavaScriptの実装、それからTypeScript向けの型定義ファイルが含まれています。これらはESModuleという形式に従ってモジュール化されています。またruby/prismのリポジトリ内に、JavaScript向けの簡単なドキュメントも含まれています。 もちろん、拡張でもこのnpmパッ

  • npm ciのキャッシュ方式の検討

    結論から言うと、node_modulesをキャッシュしてnpm ciの実行を省略するのが、多くの場合には有効そうです。 はじめに CIで npm ci を使うとき、実行時間短縮のためにキャッシュの利用を検討することになると思います。このとき、どのようにキャッシュするのが良いのでしょうか? よく知られているキャッシュ方式として、以下の二通りの方式があります。 ~/.npmをキャッシュする方式 node_modulesをキャッシュする方式 それぞれの違いについて、詳しく見てみましょう。 ~/.npmをキャッシュする方式 npm ci を実行すると、POSIX系のOSではデフォルトで ~/.npm にキャッシュデータが書き込まれます。package-lock.json をキーにこのディレクトリをキャッシュしておくことで、次回以降の npm ci 実行時にこのキャッシュデータを利用しよう、というの

    supermomonga
    supermomonga 2023/12/15
    わかる
  • RailsアプリのCI高速化

    参加しているプロジェクトで、RailsアプリのCIの高速化を行った。 まだ進行中の部分も幾つかあるが、結果から言うと、元々8分前後だったテストが3分半程度に短縮された。行った作業を幾つかの観点に分け、どのように高速化を行ったか、どの程度高速化されたか等を記述する。 プロセス数とマシン性能の調整 元々は2コア1プロセス4マシンで8分程度掛かっていたが、8コア8プロセス1マシンに変更することで5分程度に短縮された。 このプロジェクトではCIにGitHub Actionsを利用している。GitHub Actionsではデフォルトで2コアのマシンが利用されるが、Large runnerを利用して8コアに変更した。費用は変わらない。 また同時に、8プロセスで並列実行するためにparallel_testsを導入した。このプロジェクトではMySQLとElasticsearchを利用しており、またファイル

  • 実行時間ベースでテストを分割するGitHub Action

    GitHub Actionsでテストファイルを複数ノードに適切に分割するためのカスタムアクション、r7kamura/split-tests-by-timingsを作った。 CircleCIに同様の仕組みがあり、今回はこれのGitHub Actions版が欲しかった。 既存ツールとして、Go製のleonid-shevtsov/split_testsというCLIツールがあり、これを利用するchaosaffe/split-testsというカスタムアクションがある。 このカスタムアクションでも不足は無かったが、幾つかの理由で今回自作するに至った。 しばらく使いそうなので、保守性を上げるためにも、不要な機能を取り除いて必要最低限の機能にしたかった GitHub Actionsは仕様変更が多いため、自分で保守できるようにしたかった 今回、内部実装としてRust製のmtsmfm/split-testとい

  • GitHub Codespaces 雑感

    GitHub Codespacesをちょっと試した。 初期導入時にハマりどころも多いけど、真面目に設定しておけば、普通にCodespacesの環境だけで開発することは十分できそうだなと感じた。リポジトリ単位で環境を用意するのが基で、多くのリポジトリに対して毎日のようにレビューをしたりPull Requestを出したり、みたいな開発フローには綺麗にはまらないと思うけど、普通に仕事で単一のリポジトリに対してだけ作業する用途であれば上手くはまると思う。Zoomで会議しながら重い処理を実行していても影響が無いのは良かった。Zoomで会議しながら重い処理を回すべきではないという意見もある。 Codespacesの利用の流れ Codepsacesを利用するときの流れについて。まず、予め .devcontainer/devcontainer.json を配置したリポジトリを用意しておく。Codespa

  • 良かったもの2022

    良かったものを年末にまとめる回、2022年版。 ストレスレストーキョー PC作業用のデスクチェアとして使い始めたら大成功。元々はリビング用だった。 前に書いた記事: ストレスレストーキョーで作業 前に書いた記事: ストレスレストーキョーのリクライニングチェア Amazon|EKORNES [正規品]ストレスレス®トーキョー スター ブラック/マットブラック チェアのみ mサイズ|リクライニングチェア オンライン通販 エルゴトロンLX デュアル 長身ポール ディスプレイを支える技術。横長ディスプレイ上下2枚×リクライニングチェアの組み合わせが絶妙に噛み合っている。たまに縦長の絵を大きく表示したいときがあり、上側のディスプレイを引っ張って回すだけですぐ縦長にできるのも便利。 前に書いた記事: エルゴトロン LX デュアル Amazon.co.jp: エルゴトロン LX デスク デュアル モニタ

  • カスタムCopでリファクタリング

    RuboCopのカスタムCopを書いてリファクタリングを行う話として、丁度良い事例があったので紹介します。 改善したいコード 仕事先のRailsアプリを眺めてみると、昔から慣習的に次のようなコードが書かれていることが分かりました。 module A extend ::ActiveSupport::Concern included do def foo end def bar end end end 来は、特別な理由が無い限り次のように書かれるべきコードです。 module A def foo end def bar end end これは後から分かったことですが、このようなコードはファイル数で言うと数百件、メソッド定義数で言うと千件弱あるようでした。 用意したカスタムCop そこで、RuboCopのカスタムCopを書いて、このコードを自動修正することにしました。詳しい書き方についてはここ

    supermomonga
    supermomonga 2022/10/13
    いいね
  • Ruby用VSCode拡張: vscode-ruby-light

    Ruby向けに、vscode-ruby-lightというVSCode拡張をつくっています。この拡張は、利用者に特にRubyのインストール要求することなく、シンタックスハイライトやカーソル操作など、VSCode標準の機能よりちょっと良い編集体験を提供しようという目的の拡張です。 最初は「メソッドやブロックをもう少し上手く選択できるようにしたい」というモチベーションで調べ始めたのですが、気付けば色々な機能を持つVSCode拡張が出来上がっていました。この記事では、幾つかの機能を紹介しながら、関連する話を書いていこうと思います。 Selection Range VSCodeにはExpand Selectionというコマンドがあり、選択範囲を拡大したり狭くしたりできます。このコマンドには、例えばWindowsであればデフォルトでShift + Alt + →にショートカットキーが割り当てられていま

  • SolargraphをDocker環境でこっそり使う

    YARDのアノテーションを元にそこそこ便利な説明や補完機能を提供してくれるSolargraphを、Gemfileに含めずこっそり使いてえ……しかもDocker環境で……という人向けの情報。 一番の問題として、gem install solargraph でsolargraph gemを入れたい訳だけど、揮発しないように工夫が必要になる。 一般的なRuby向けのDockerfileの構成だと、bundle install で入れるGemだけをdata volumeで永続化していることが多い。よく見るパターンは、vendor/bundle または /usr/local/bundle にdata volumeをmountするようdocker-compose.ymlで設定し、加えてこのパスを BUNDLE_PATH に設定するパターン。これに加えて例えば GEM_HOME も同じパスに設定しておく

  • 『Sustainable Web Development with Ruby on Rails』を読んだ

    David Bryant Copelandさんが書いた、Railsについてのこだわりの詰まった。 takahasimさんも『Sustainable Web Development with Ruby on Rails』はRails使ってるなら絶対面白いと思うと言っていたように、面白い。これまでRailsを使ってきた中で、楽しいこともつらいことも沢山あったんだろう。そういうことが感じ取れるような話が展開されている。 幾つかの気になった話題を拾い上げて、自分の感想を述べていきたい。気になる話題は100個ぐらいあるが、がんばって10個ぐらいに留めたい。 Don’t Create Custom Actions, Create More Resources Railsが提供する7種類のアクション名以外使うな、必要なら新しくリソースをつくれ、という主張。つまりDHHはどのようにRailsのコントロー

  • Chrome拡張 つくりかた 令和最新版

    数年ぶりにChrome拡張のつくりかたを調べた。 当に何も分からなかったので、Twitterで「2022年にChrome拡張つくりたかったら何見て学べばいい?」とつぶやいてみたところ、何人かの人が教えてくれた。教えてもらった中から幾つかのリンク先を紹介するような形で記述していく。 Create a Vite-React Chrome Extension in 90 seconds - DEV Community 2022年時点だと比較的新しめのフロントエンド向けツールであるviteと、viteのChrome拡張向けプラグインである@crxjs/vite-pluginを使ってChrome拡張をつくってみよう、という記事。今回自分は主にこれを参考にしながら開発を進めた。Reactと言っているが、自分のChrome拡張ではUIは存在しなかったので、Reactに関する部分は読み飛ばして、vite

  • Rustでサイトを再実装

    このサイト r7kamura.com の実装言語をRubyからRustに変えてみた。 アプリケーションの概観 このサイトには、大別すると次の6種類のルーティングパターンがある。 GET / トップページ GET /articles/:article_id 記事ページ GET /feed.xml RSSフィード GET /links リンク集 GET /sitemap.txt サイトマップ (Google Search Console等が利用する) GET /* その他の静的ファイル (CSSや画像など) Rubyの実装では、適当なRackアプリケーション + rack-captureという構成で、Webアプリケーションとして実装しつつGitHub Pagesのために静的ファイルも吐き出せるという仕組みになっていた。 Rustの実装もほぼ同じで、適当なHTTPサーバー + 適当なHTTPクラ

    Rustでサイトを再実装
  • Windows開発環境構築メモ

    開発環境構築用のメモを自分用に書き残しておく。 GUIアプリケーション この辺りを入れる。 Google Chrome Google日本語入力 1Password 4 Dropbox Docker Desktop for Windows 未だに購読版に移行せず買い切り版の1Password 4を利用している。 Windows + Vを利用するとクリップボード履歴を有効化できるので、済ませておく。 Google日本語入力の設定 HENKANキーでIMEを有効化 MUHENKANキーでIMEを無効化 というキー設定を普段利用しているのでそのように設定する。 直接入力 入力文字なし 変換前入力中 変換中 以上の4つのモードについて、それぞれキー設定のエントリを追加する。 Windowsライセンス認証 Windows 10 Pro 64bit辺りをライセンスキー無しでインストールしていると思うので

    Windows開発環境構築メモ
  • 個人事業主で転居したときに出す書類

  • サメを支える技術 第2版

    大きなサメのぬいぐるみの購入方法について。 背景 最近サメの人気が高まっているのか、サメのぬいぐるみについてよく質問されるようになった。Gawr Guraさんの影響が大きいのかもしれない。つい先日質問してきた人は、サメ好きの友達プレゼントするつもりらしい。いい友達だ。これまでこういう質問に対しては昔書いたサメを支える技術を紹介していたが、情報が古くなってきたので、この機会に新たに書き直すことにした。 サメの配信を見るサメ 購入方法 2020年10月25日現在では、この大きなサメのぬいぐるみはchumbuddy.comから購入できる。2015年にはamazon.comでも購入できたので、自分はここから購入したのだけど、今は取り扱っていないようだ。惜しいことだ。 chumbuddy.comでは、わた入りザメとわた無しザメが売られている。 体積が増えるので海外からの配送が大変そう 出所不明のわ

    サメを支える技術 第2版
  • GistでGemを公開

    Gistにファイルを置くだけで、Gemとして公開できる。 最小構成だと、gemspecとソースコードをGistに配置すれば良い。 Gem::Specification.new do |spec| spec.name = 'my_gem' spec.version = '0.0.1' spec.authors = ['Your Name'] spec.email = ['[email protected]'] spec.summary = 'Summary of this gem' spec.files = ['my_gem.rb'] spec.require_path = '.' end # ここに好きなコードを書く 使う側では、gitプロトコルでGistのGitリポジトリとしてのURLを指定すれば良い。 gem 'my_gem', git: 'https://gist.github.co

    GistでGemを公開
  • Windowsで開発

    Windowsで開発環境を整えた。 背景 開発環境を改善しようと思い、PCデスクの見直しなどをやっていたら、Windowsでも開発できるようにしようと思い至った。新しい環境を試してみたい気持ちが1割と、新しいゲーミングPCを組みたい気持ちが9割だ。 エディション Windows 10 Homeエディションを利用している。 Windows 10 ProにはHyper-Vという仮想化機能を直接利用できる利点があるが、WSL2で同じようなことをより便利に実現できるようになったおかげで、この点においてPro版の必要性は薄れてきている。今のところ自分のやりたいことはWindows 10 Homeですべて実現できている。 Windows Update WSL2を使うために、Windowsをバージョン2004・ビルド19041に更新した。 日々の自動更新ではバージョン1903で止まっていて、まだ自動では

    Windowsで開発
  • Rails 設計 最強

    自分が目指したいRailsアプリの形とは何か、ということについて考えていた。 常日頃から考えていたRailsアプリでの不満をこの議論に合流させた結果、「Rubyを書くときに当たり前にやるようなことを、Railsアプリを書くときでも当たり前のようにやる」というところが肝で、自分が目指したいRailsアプリの形はその先にあるのではないか、と一旦結論付けてみることにした。 「普通にRubyでコードを書くときはやらないけど、Railsだったらこう書く」という何かが存在していることが、さまざまな失敗の原因をつくっていると思う。 RubyRailsが地続きに繋がっていないというか、どこかで断絶があり、そこから筋の悪い設計が生まれている ―あるいは持ち込めるはずの良い設計を持ち込めていない― のではないか、という話。 実際にはどの辺りが気になっているのか?という例を挙げると、氷山の一角を指摘するだけな

    Rails 設計 最強
    supermomonga
    supermomonga 2020/09/26
    わかりすぎる
  • 1