ククログ
https://www.clear-code.com/blog/
ククログはクリアコードのブログです。開発に関わる技術情報や、会社での出来事を記録しています。
フィード

ブラウザーの拡張機能でコンテンツ内に安全に情報を埋め込む方法のベストプラクティスとバッドプラクティス
1

ククログ
Firefoxの拡張機能開発で育ち、今はChrome/EdgeなどのChromium系ブラウザー向け拡張機能も開発している結城です。これらのブラウザー向け拡張機能では、拡張機能が能動的にUIを表示する方法が限られています1。能動的に任意の位置にUIを表示したい場合、windows.create()でウィンドウを開くか、コンテントスクリプトを使ってコンテンツ内にUIを埋め込むかのどちらかの方法を取る必要があります。この記事では、後者の「コンテンツ内にUIを埋め込む」やり方について、現時点でのベストプラクティスと、それ以外の方法の問題点を紹介します。最初に結論だけ述べると、mode:'closed'のShadow DOMを使い、画像などは拡張機能のパッケージ内に含めておくのが現状でのベストで、それ以外の方法は全てセキュリティまたはプライバシー保護の点で問題があります。前提:どういう時に必要な技術か冒頭の説明だけではそもそも何故そんなことをする必要があるのか分からないと思うので、もう少し背景を説明します。筆者は個人的に、Firefoxのサイドバーにタブをツリー表示する拡張機能「Tree Style Tab」を開発しています。この拡張機能はFirefoxのタブUIの機能を可能な限り再現する方針で開発していますが、技術的な制約により再現できていない機能もいくつかあります。つい最近までその中の1つとして、「タブのプレビューのポップアップ」がありました。どのような機能かというと、Firefoxのタブの上にマウスのポインターを移動してしばらく待つと、タブの下にポップアップパネルが自動的に開かれ、その中にページのタイトルやサムネイル画像が表示されるというものです。このスクリーンショットを見て分かるとおり、プレビューのポップアップパネルはFirefoxのツールバーやコンテンツ領域の上に重なるように表示されます。他方で、Tree Style Tabは専用のサイドバーパネルの中にUIを表示する設計のため、そのままではサイドバー内にしかUIを表示できず、「コンテンツ領域の上に重なるようなポップアップパネル」は実現できません。そのため、実装されたタブのプレビューは、コンテンツ領域内に埋め込む形で実現しています。このようなことをTree Style Tabのような拡張機能でやるにあたって、特に重
1日前

Inkscape: 拡張機能の開発に入門するよ!
ククログ
2年に1回くらいInkscapeを使って図を描いている阿部です。みなさんはInkscapeをご存知でしょうか。すこぶるざっくりいうとお絵かきソフトです。Inkscape: https://inkscape.org/そのInkscapeには拡張機能というのがあって、便利な機能を開発して組み込めることを最近知ったので入門してみました。公式ドキュメントの通りに進めていくと入門できるので、そこには公式ドキュメントにおまかせして、ドキュメントに書いていない補足情報とかを共有します。想定読者入門前の私が以下の知識レベルだったので、どれかに当てはまりつつ、Inkscapeの拡張機能を開発したい方にはこの記事が参考になると思います。Inkscapeとはお絵かきソフトで、ベクターな画像が書けて、JPEGとかPNGとかよりきれいなのが描けるらしいSVGというフォーマットのファイルができるSVGフォーマットJPEGとかPNGとかよりきれいに表示できる(拡大してもガタガタしたりしない)中身を見るとバイナリじゃなくてテキストらしいXMLをXPathがどうとかで処理したことがあるHTMLをJavaScriptのgetElementById()とかで処理したことがある拡張機能の開発に入門基本的に公式ドキュメントの通りにやると拡張機能の開発に入門できます。https://inkscape.gitlab.io/extensions/documentation/tutorial/my-first-effect-extension.htmlコード例も記載されてあるので書いてある通りに編集すれば(もしくは完成形を所定の場所にコピーすれば)、Inkscapeの拡張機能を体感しつつ入門できます。掲載したURLのページ以外にもいくつか入門するためのドキュメントが実装例とともに用意されているので、その通りにやれば最初の一歩は踏み出せると思います。以降では最初の一歩を踏み出した私がドキュメントには書いてなかったけど、知っていると役に立つかもしれない情報を3つ紹介していきます。それぞれ独立した話でセクションごとの繋がりは何もないのでそのつもりでご覧ください。Inkscapeの拡張機能の開発に役立つかもしれない情報Inkscapeの拡張機能はPythonスクリプトを実行するだけドキュメントの実装例を見ると次のようなPy
4日前

Firefox ESR140.1のリリースとFirefox ESR128のサポート終了について
ククログ
来る9月16日に、Firefoxの法人向け長期サポート版であるFirefox ESR1の、1つ前のメジャーバージョンにあたる「Firefox ESR128」のサポートが終了します。Firefox ESRは現在、ESR140とESR128の2つのバージョンが存在しており、8月19日には、それぞれのセキュリティアップデート版であるESR140.2とESR128.14がリリースされる見込みです。このうちESR128.14はESR128の最終バージョンになる予定で、ESR140.3のリリースをもってESR128はサポートが終了する旨予告されており、以後はESR140への移行が強く推奨されます。当社では、Firefox ESR128からESR140の間の変更点のレポートを公開しており、このレポート中では10のカテゴリーに分けて、法人利用に影響が及ぶと考えられる変更点を詳細に紹介しています。この記事では、その中で特に影響度が大きいと考えられる項目を5つのカテゴリーから抜粋してご紹介します。Firefox ESR128からESR140の間の変更点(抜粋)外観、メニュー構成の変更「Firefox利用規約」が新たに導入されました(2025年2月28日発効)。「皆様が Mozilla に付与する権利と許可」のセクションがあり、ユーザーがFirefoxに入力したデータの処理をMozillaに許可していることを明確化する狙いがあると見られます。既存ユーザーに対しても、2025年後半以降に承諾を求めることになる旨アナウンスされています。このため、初回起動時などに、Firefox利用規約への承諾を求められるようになりました。この利用規約の表示は、SkipTermsOfUse ポリシーで非表示にできます。このポリシー設定を使用した場合、Firefoxの全使用者に代わってシステム管理者が利用規約を承諾した扱いとなります。ウェブページ翻訳が日本語への翻訳に対応するようになりました。(Firefox 135)Firefox内蔵の翻訳機能は、Webサービスに依存せず端末上で実行されるため、機密情報やプライバシー情報の漏洩の恐れがありません。サイドバーの機能が拡充され、メイン画面を表示させたまま各種ツール2へワンクリックで素早くアクセスできるようになりました。(Firefox 136)この機能は初期状態で
7日前

Redmineのバージョンアップサポートの事例紹介(Knowledgebaseプラグインを置き換え)
ククログ
2025/07/25に開催されたRedmine Japan vol.4に参加した阿部です。Redmine Japan: https://redmine-japan.org/普段はあまりこういったイベントには参加していないのですが、最近はRedmineのプラグインを開発したりしているので参加しました。いろいろな方とお話するとRedmineバージョンアップ時に苦労されている様子でしたので、ご参考までに弊社で行ったバージョンアップの事例を紹介してみます。はじめに: Redmine Japanに参加して今回は聞くだけ参加でした。来年で最初のRedmineがリリースされてから20周年ということでRedmineの歴史のお話や、昨今のAI技術の発展に関連してAIに関連する発表が多数聞けて大変参考になりました。(当日の様子はこちらから確認できるようです。)当日は何人かとお話する機会がありました。ありがとうございました。そこでRedmineの古いバージョンを使い続けていたり、バージョンアップが大変だというお話を何個かお聞きしたので、弊社でサポートした事例を紹介します。Redmineのバージョンアップサポートの事例紹介どうしてバージョンアップが大変なのかはRedmineを運用中の方であればご存知かもしれませんが、再確認のためにその理由を説明をしつつ、どのようなサポートをしたのかを説明していきます。Redmineのバージョンアップが大変な理由Redmine本体のみのバージョンアップは容易な場合が多いです。バージョンアップを大変にしている原因はインストールしているプラグインです。プラグインもRedmineのバージョンアップに追従する修正をする必要があります。バージョンアップに追従しないと、そのプラグインはバージョンアップ後のRedmineで動かなくなります。(場合によってはプラグインの影響でRedmine自体起動しなくなります。)しかし、すべてのプラグインがバージョンアップに追従しているとは限りません。追従していないプラグインはRedmineのバージョンを上げると動かなくなるので、そのようなプラグインがあるとRedmine自体のバージョンアップができなくなるわけです。導入したもののあまり使っていないプラグインであればRedmineのバージョンアップ時に削除すれば良いですが、日々の運用がプラ
22日前

ハンズオン: Redmine環境に高速な全文検索プラグインを導入してみよう(PostgreSQL編)
ククログ
Redmineを高速全文検索するプラグインの開発に参加している児玉です。ククログではこれまで何度かこのプラグインについてご紹介してきましたが、今回はDebian/Ubuntu向けハンズオン形式で「手を動かして」実際に導入するまでを紹介します!(他のOSをお使いの場合は、適宜コマンドやリポジトリ登録方法を読み替えて進めてください。)redmine.tokyo第12回勉強会:GroongaでRedmineを高速全文検索 #redmineTredmine.tokyo第17回勉強会:Redmine検索の未来像 #redmineTRedmine大阪 第17回勉強会 - 全文検索でRedmineをさらに活用! #RedmineOsakaはじめにチケット数が増えてきてRedmineの検索がもっさりしてきていませんか?そんな方に向けて、本ハンズオンでは既存のRedmine+PostgreSQL環境に対して、全文検索プラグインを導入し、「サクサク検索」を体験する手順を解説します。(MySQLとMariaDBに関しても対応していますが、今回はPostgreSQLに注目して話します。)なお、本手順で使うバージョンは以下の通りですが、古いバージョンをお使いの方やバージョンアップからサポートが必要な場合は、お気軽にお問い合わせください!注意: 本ハンズオンを実施する前に、データベースのバックアップを必ず取得してください。今回の実践環境Ubuntu 24.04 LTS (Noble Numbat)Ruby 3.3.8Redmine 6.0.5PostgreSQL 17.5ハンズオンの流れ次の手順で、ハンズオンを進めていきます!PostgreSQLの拡張機能であるPGroongaをインストールPostgreSQLでpgroonga拡張を有効化全文検索プラグインのインストール全文検索プラグインの設定既存データを検索対象に登録動作確認1. PostgreSQLの拡張機能であるPGroongaをインストール今回は、PostgreSQL Global Development Group(PGDG) が提供するPostgreSQL 17.5パッケージを利用する場合の手順を紹介します。システム標準のPostgreSQLをお使いの場合は、こちらのPGroongaインストール手順を参照してください。# 基本ツー
1ヶ月前

Apache Arrow Swift 21.0.0
ククログ
Apache Arrowの開発に参加している須藤です。Apache ArrowのSwift実装のバージョン21.0.0をリリースしたので紹介します。背景Apache Arrowはいろんなプログラミング言語で広く使えることも大事にしているので、各種プログラミング言語用の実装があります。もともとは https://github.com/apache/arrow の中で各種言語の実装を管理していました。しかし、 https://github.com/apache/arrow のメンテナンス・リリースコストが高くなってきました。そのため、メンテナンス・リリースコストを分散するために言語ごとに別々のリポジトリーに分離していっています。Swift実装は https://github.com/apache/arrow-swift に分離することになりました。関連議論はここらへんです。[DICSUSS] Split Swift to separated repository[VOTE][Swift] Split Swift to separated repositorySwift Package Indexに登録するにはトップレベルにPackage.swiftを置かないといけなそうというのが一番のモチベーションでした。メンテンナンスを楽にというのもあるけど、リリースコスト云々はあんまり関係ありませんでした。そもそもSwift用のリリース作業はほとんど発生していなかったからです。分離してからせっせとリリースの準備を進めていたのですが、ようやく、今日、分離したリポジトリー https://github.com/apache/arrow-swift からリリースできました!やったよ![VOTE][Swift] Release Apache Arrow Swift 21.0.0 RC0[ANNOUNCE] Apache Arrow Swift 21.0.0 released21.0.0の変更点新しいバージョンは21.0.0とメジャーバージョンアップになっています。非互換の変更は含まれていない気はしますが、私のSwift力では判断しきれなかったからです。(なけなしの私のSwift力で)5.10だけではなく6.0以降でもビルドできるようにしましたが、これは、たぶん非互換にはなっていないはず。ま
1ヶ月前

Apache Arrow JS 21.0.0
ククログ
Apache Arrowの開発に参加している須藤です。Apache ArrowのJavaScript実装のバージョン21.0.0をリリースしたので紹介します。背景Apache Arrowはいろんなプログラミング言語で広く使えることも大事にしているので、各種プログラミング言語用の実装があります。もともとは https://github.com/apache/arrow の中で各種言語の実装を管理していました。しかし、 https://github.com/apache/arrow のメンテナンス・リリースコストが高くなってきました。そのため、メンテナンス・リリースコストを分散するために言語ごとに別々のリポジトリーに分離していっています。JavaScript実装は https://github.com/apache/arrow-js に分離することになりました。関連議論はここらへんです。[DISCUSS] Split JS release process[Release] Split JS to its own repository · apache/arrow · Discussion #45943[VOTE] Split JS implementation and Release Process分離してからせっせとリリースの準備を進めていたのですが、ようやく、今日、分離したリポジトリー https://github.com/apache/arrow-js からリリースできました!やったよ![VOTE][JS] Release Apache Arrow JS 21.0.0 RC1[ANNOUNCE] Apache Arrow JS 21.0.0 released21.0.0の変更点新しいバージョンは21.0.0とメジャーバージョンアップになっています。これは、非互換の変更があるからです。どんな変更かというと、すでにEOLになっているNode.js 18のサポートをやめたという変更です。それ以外は依存ライブラリーのバージョンをあげたくらいでそんなに大きな変更点はありません。変更のリストを見るとそれなりにありますが、ほぼ、リリース関連と依存まわりの整理です。今回のリリースでは新しいリポジトリーで開発を進めていける基盤を整えたかったのです。これからこのリポジトリーの分離と、
2ヶ月前

小さくはじめるRuboCop入門 (Fluentdへの適用事例)
ククログ
クロスプラットフォームで動作し、オープンソースであるデータ収集ソフトウェアとしてFluentdがあります。Fluentdはさまざまな用途にあわせてプラグインにより機能を拡張できます。多くのプラグインが開発されているのは、要件を満たすべく新規にプラグインが開発される事例があるためです。これまでもお客様の要望にあわせて、クリアコードでプラグインを開発した実績があります。今回は、RuboCopをまだ導入していないプロジェクトにおいて、コードのリファクタリングの観点から"小さく"Fluentdに適用してみた事例を紹介します。RuboCopを適用してみるきっかけきっかけとなったプルリクエストは次のものでした。Use UnboundMethod#bind_call method instead to improve performanceFluentdのメンテナンスに関わっているクリアコードの藤田さんによるものです。RuboCopでパフォーマンスの問題を見つけたのでフィードバックしたとのことを聞いて、RuboCopをそのうち使ってみたいと思っていたのを覚えています。1Fluentdの2025年7月時点の最新版はv1.18.0ですが、次期バージョンのv1.19.0のリリースを近々控えています。また、Fluentdをさまざまな環境で使いやすいようにパッケージとして開発・配布しているfluent-packageの最新版であるv6(今年の8月リリース予定)に同梱する予定もあることから、このタイミングで投入してみることにしました。どのように適用することにしたのかRuboCopは次のようなカテゴリでRubyのコードをチェックしてくれます。LintStyleGemspecNamingLayoutMetricsSecurityこれに加えて、RuboCop Performance2というRuboCopのプラグインを導入すると、パフォーマンスの観点から問題のある書き方を検出できます。Fluentdは長期に渡ってメンテナンスされ続けているプロジェクトです(現在はクリアコードが開発を主導しています)。したがって、すべてのカテゴリでチェックを有効にすると指摘箇所が膨大となり追従していくのにもそれなりのコストがかかってしまいます。そこで、次のような方針で適用してみることにしました。適用するのは、Secur
2ヶ月前

PowerShellで現在のセッションのカルチャを一時的に変更する方法
ククログ
主にWindows環境での開発を行っている橋田です。今回、PowerShellで現在のセッションのカルチャを変更する方法を調査しました。これは、PowerShellのスクリプトがシステムのカルチャの影響を受けないようにしたい場合などに便利です。バージョンによって対応方法が異なることや、その背景など、調査をして初めて知ったこともあったため、その調査結果を紹介します。デフォルトのコマンドレットPowerShellには、以下のようなカルチャを変更するコマンドレットが存在します。Set-CultureSet-WinUILanguageOverrideSet-WinSystemLocaleしかしこれらのコマンドレットは、システム全体やユーザー単位の設定を書き換えるため、現在のセッションのカルチャのみを一時的に変更したいという目的では使用できません。セッションのカルチャの動作セッションのカルチャの動作については、PowerShell 6で仕様変更が入っています。https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.5#make-psculture-consistently-reflect-in-session-culture-changes$PSCulture がセッション内カルチャの変更を一貫して反映Windows PowerShell では、現在のカルチャの値がキャッシュされるため、セッションの開始後にカルチャが変更されると値が同期しなくなる場合があります。 このキャッシュ動作が、PowerShell Core で修正されています。PowerShell 6以降では[System.Threading.Thread]::CurrentThread.CurrentCultureを変更すると現在のセッションに反映されます。一方、PowerShell 5.1以下では[System.Threading.Thread]::CurrentThread.CurrentCultureを変更しても、キャッシュされた値が使われるため現在のセッションには反映されません。キャッシュされているカルチャの値を変更する必要があ
2ヶ月前

Apache ArrowとCMake - FetchContent
ククログ
Apache Arrowの開発に参加している須藤です。現時点でapache/arrowのコミット数は1位です。私はRubyでデータ処理できるようになるといいなぁと思ってApache Arrowの開発に参加し始めました。同じような人が増えるといいなぁと思うので、最近の活動を紹介して仲間を増やそうと試みます。今回はApache Arrow C++で使っているビルドツールCMakeのFetchContentという機能を紹介します。背景Apache Arrow C++は開発当初からビルドツールとしてCMakeを使っています。最近はMesonでも(一部の機能は)ビルドできるようになっています。世の中にはビルドシステムをいじるのも好き(苦にならない)という人がそんなにいないようで、ビルドシステムをいじるのも好きな私が結構メンテナンスしています。今回はCMakeの機能の中でも依存ライブラリーの管理に使えるFetchContentに注目します。最近は、似たような機能であるExternalProjectからFetchContentに移行しています。たとえば、私は最近はAWS SDK for C++の管理をExternalProjectからFetchContentに移行しています。Apache Arrow C++はたくさんのライブラリーに依存しています。すべての依存はオプションになっているので、最小限の機能でビルドするときは気にしなくてよいですが、普通はそれなりに機能を有効をしてビルドするので気にしなければいけません。普通は依存しているライブラリーを事前にインストールしておかなければいけません。システムのパッケージマネージャー(Debianならaptとか)でインストールできるものなら比較的簡単に準備できますが、そうでないものを準備することは面倒です。ソースをダウンロードしてビルドしてインストールしないといけません。ということで、デフォルトではシステムにある場合はそれを使って、ない場合は自動でソースをダウンロードしてビルドするようになっています。それを便利にするための機能がFetchContentやExternalProjectです。ちなみに、MesonにもSubprojectsという似たような機能があります。CMakeで依存ライブラリーをビルドする方法CMakeで依存ライブラリーをビル
2ヶ月前

Rundeck: サービスを再起動すると終了しないジョブが現れる
ククログ
定期実行といえばcronの阿部です。定期実行するときにみなさまはどのようなソフトウェアをご利用でしょうか?この記事はFLOSS1サポート業務でジョブ管理ツールのRundeckについて調査したのでその事例紹介です。(本題と全く関係ないのですが、最近、systemdのtimerという機能でも定期実行できることを知りました。)はじめに思ったより書くことが多くなりそうだったので、だいぶ簡潔に書きました。いろいろ省略したことで説明が正確ではない部分があるかもしれませんがご容赦ください。Rundeckの説明この事例に関連するところだけを簡単に説明どのような問題があったのか説明問題を調査した結果の流れで説明していきます。RundeckとはRundeck: https://www.rundeck.com/Rundeckはジョブ管理ツールです。cronに馴染みのある方であれば、cron + crontab + いい感じのGUI という理解で60%くらい合っていると思います。以降で、サポート事例を紹介するにあたりRundeckについて知っていたほうが良い部分だけ簡単に説明します。Rundeckの概要Rundeckは常駐プログラムですsystemdでstartしたりstopしたりしますRundeckのジョブとはcrontabでいうところの 5 0 * * * COMMAND の1行という理解で30%くらい合ってます(もう少し複雑な設定ができます)実行したいコマンドを登録して、スケジュールの設定とかができます参考: https://docs.rundeck.com/docs/manual/jobs/creating-jobs.html#scheduled-jobsRundeckがジョブを実行するときはスレッドで実行しますRundeckはジョブを実行しているスレッドが、ジョブのステータス(正常終了したとかエラーだったとか)をDB(H2とかPostgreSQLとか)に保存しますクラスターモードで冗長構成が実現できますhttps://docs.rundeck.com/docs/administration/cluster/補足: クラスターモード記事の内容に関係があるのでクラスターモードについて少し補足します。クラスターモードにすると、Rundeckサーバを複数台 + DBサーバは共通の1台、の
2ヶ月前

SQLで理解する!Groongaのドリルダウン入門
ククログ
select max(_id) from table; なことをGroongaでしたい阿部です。冒頭から余談です。SQLは大文字で書く方がよくある書き方なんですが、小文字で書く派もそれなりいて私は小文字で書くのが好きです。大文字で書くのがめんどくさいからです。ということで、本記事ではSQLは小文字で書きます。閑話休題。Groongaは集計もできます。ただちょっとややこしいので、SQLで書くとこんな感じになりますよ、ということを示して世に多いであろうSQL好きにGroongaをPRするための記事です。おことわり書きコマンドの省略例示するGroongaコマンドが長くなるので --output_pretty yes は省略して掲載しています。レスポンス例の省略Groongaのレスポンスは [HEADER, BODY] の形式です。参考: https://groonga.org/ja/docs/reference/command/output_format.htmlまずこの HEADER の部分は省略します。また BODY の中には「何も加工していない検索結果部」と「集計結果部」の2つになります。今回は集計に焦点を当てるので、「何も加工していない検索結果部」は省略します。説明に使うデータ_keytagpriorityGroonga v13Groonga10Groonga v14Groonga60Mroonga v13Mroonga61Mroonga v14Mroonga24Mroonga v15Mroonga68Rroonga v12Rroonga3Rroonga v13Rroonga-9Rroonga v14Rroonga29Rroonga v15Rroonga0Groongaにデータを投入するには次のコマンドを実行します。table_create Tags TABLE_PAT_KEY ShortTexttable_create Memos TABLE_HASH_KEY ShortTextcolumn_create Memos tag COLUMN_SCALAR Tagscolumn_create Memos priority COLUMN_SCALAR Int64load --table Memos[{"_key": "Groonga v13", "tag": "Gro
2ヶ月前

PGroongaでGroongaのリソースを確認する(n_buffer_segmentsの値)
ククログ
PostgreSQLのautovacuumと格闘中の阿部です。(という出だしで始めましたが本記事ではPostgreSQLのautovacuumについては触れないので、興味があれば公式ドキュメントをご覧ください。)今回はPGroongaからGroongaのリソースを確認する方法を紹介します。PGroongaはインデックスとしてGroongaを使うPostgreSQLの拡張機能です。PostgreSQLにてお手軽にゼロETLで全言語対応の超高速全文検索機能を使えるようになりますが、より専門的なチューニングなどをする場合は内部で利用しているGroongaの状況も確認する必要があります。今回はその一例としてGroongaのn_buffer_segmentsの値を確認する方法を紹介します。はじめにこの記事はPGroongaでGroongaのリソースを確認するイメージをつかんでもらうことを目的に書いています。本文中に登場するGroongaコマンドやPGroongaの関数について細かく説明しすぎると目的から外れてしまうので簡単に紹介するに留めます。この記事では次のGroongaコマンドやPGroongaの関数が登場します。Groongaコマンドobject_inspect: https://groonga.org/ja/docs/reference/commands/object_inspect.htmlオブジェクト(テーブルやカラム)を調査するコマンドですこのコマンドで表題のn_buffer_segmentsの値も確認できますdump: https://groonga.org/ja/docs/reference/commands/dump.htmlいわゆるdumpコマンドですスキーマやデータを出力しますPGroongaの関数pgroonga_index_column_name: https://pgroonga.github.io/ja/reference/functions/pgroonga-index-column-name.htmlPGroongaのインデックス名をGroongaのインデックスカラム名に変換しますpgroonga_command: https://pgroonga.github.io/ja/reference/functions/pgroonga-comm
2ヶ月前

Apache ArrowのCI - Crossbow
ククログ
Apache Arrowの開発に参加している須藤です。現時点でapache/arrowのコミット数は1位です。私はRubyでデータ処理できるようになるといいなぁと思ってApache Arrowの開発に参加し始めました。同じような人が増えるといいなぁと思うので、最近の活動を紹介して仲間を増やそうと試みます。今回はapache/arrowリポジトリーで使っているCIツール「Crossbow」を紹介します。背景Apache Arrowはいろんな言語で使える!というのもウリの一つなので、たくさんの言語での実装があります。Apache Arrowのリポジトリー分割で紹介した通り、apache/arrowリポジトリー内に各種言語の実装がありました。こういう構成にしているとなにが困るかというと、CIです。1つのリポジトリーに開発が集中してCIが追いつかないんです。最近は各実装の別リポジトリーへの分割やGitHub Actionsのキャパシティ増加(Apache Software Foundationがなにかお金を払ってくれているのかもしれないがよくわかっていない)などで溢れ(実行待ちのジョブが溜まってなかなか結果を確認できない)なくなっていますが、2018年頃は溢れていました。ということで、「Crossbow(クロスボウ)」というApache Arrowの開発用のCIツールが開発されました。名前の由来はArrow(矢)に関連する単語だから、なはず。クロスボウは矢を射る弓の一種。Crossbowを使うことでapache/arrowのCIキャパシティは増加し、開発が楽になりました。しかし、前述の通り、2018年当時と比べると状況はだいぶ変わってきたので、Crossbowを卒業できるようになってきている感があります。ということでCrossbowをやめない?という提案をしているのですが、それについてはまた別途紹介します。今回はCrossbowを紹介します。CrossbowCrossbowはかなり強引にCIのキャパシティを増やすツールで、まぁ、なんというか、あまり行儀はよくありません。どうやってCIのキャパシティを増やしているかというと、各種CIサービスを組み合わせることで増やしています。1つのCIサービスだと溢れちゃうならたくさんCIサービスを使えばいいんじゃない?というアイディアです。
2ヶ月前

どんなコメントを書くのか
ククログ
13年前にリーダブルコードの解説を書いた須藤です。リーダブルコードにもコメントの話がありますが、本に書いているケース以外でもコメントを書くことがあるので紹介します。ちなみに、私はできるだけコメントを書きたくない派ですが、そんな私でもコメントを書いておいた方がよいという場面があるのです。まぁ、レビューすることが増えちゃって、自分でコメントを書くというより、コメント書いておいて、と言うことの方が多いんですが。。。いつ削除してよいかを書く一時しのぎのコードを書かないといけないことがあります。たとえば、依存ライブラリーに問題があり、依存ライブラリーに報告して修正した(みんなもアップストリームで直すんだよ!)けどまだ修正が含まれた依存ライブラリーがリリースされていないときです。この場合は手元のコードに一時しのぎのコードを書いて対処したりします。このような場合は「いつこの一時しのぎのコードを削除してよいのか」をコメントで書きます。例: https://github.com/apache/arrow/pull/45310#discussion_r1924494628Could you add a comment that we can remove this workaround when we require aws-sdk-cpp 1.11.489 or later?このようなコードは不要になったらすぐに消したいものです。(研鑽Rubyプログラミングでも機能削除がうれしいと書いているよね!)このようなコメントがないと、このようなコードを見るたびに消せるかな?と確認しなければいけません。このようなコメントがあれば、すぐに消せるかどうか判断できます。リーダブル!どんなlintを無視しているかを書くlinterは機械的にいろいろチェックしてくれるので便利です。しかし、たまに誤検出することもあるので、そのようなチェックは個別に無視します。多くの場合、チェックはたくさんあり、特定のチェックを無視するためにはどのチェックかを識別する必要があります。識別するためのIDを数値で振っているlintもあればヒューマンリーダブルな文字列で振っているlintもあります。たとえば、Hadolintは数値でIDを振っているlintです。# hadolint ignore=DL3006とかで特定のチェック
3ヶ月前