MENU

気づきをもらい、コツコツ実装|Trinityリリースノート・トピックス❶ ~「ソース検索辞書」の検索で利用できる「条件式」の追加(倉橋徹次)

こんにちは、株式会社ZeroDivideの倉橋です。

2021年4月9日にTrinityのバージョン10.00をリリースしました。詳細については以下のアドレスにまとめがあるので、興味のある方は参照して下さい。

https://www.zerodivide.co.jp/trinity/trinity4r.html

このコラムでは普段はあまりお話しする機会のない実装の背景について、トピックスごとに5回に分けてお話ししていきたいと思います。今回は、「ソース検索辞書」の検索で利用できる「条件式」についてです。

検索時間のストレスを解消したい

プログラムを開発する時、文字列検索ってとても便利で重要な機能だと思います。

私自身も開発ではよく利用しますし、Trinityにはそのものズバリの「ソース検索」という機能が用意されています。

ソース単体で検索を行う場合もありますが、一番便利に感じるのはファイルを横断して検索を行う時ではないでしょうか。

手作業で行うなら、「ファイルを開いて検索する」という操作を繰り返さねばなりませんが、ファイルを横断して検索する機能があれば、複数のファイルを一気に検索できます。実際、私も開発ではよく利用しますし、とても重宝しています。

そんな便利な機能ですが、検索にかかる時間については毎回ストレスを感じています。

私が開発に使用しているIDEもそうですし、Trinityの「ソース検索」もそうですが、1つ1つファイルを開いて検索を繰り返すのって想像以上に時間がかかります。仮に実際の検索時間が1分程度でも、すぐに知りたい情報が得られるまでPCの前でぼーっと画面を眺めて待つのは想像以上の苦痛です。

そんなこともあって、Trinityの「ソース検索」については長年、検索にかかる時間に不満を持っていました。それを解消するために実装に着手したのが、「ソース検索辞書」を使用した検索機能です。

では「ソース検索辞書ってなんだ?」ということですが、これは非常に単純で、設計書の作成対象になったメンバーソースを加工してから若干の情報を加えてデータベースに登録したものです。

このデータベースに対してクエリーを発行することで、高速な文字列検索を実現しています。つまり、「データベースの性能に依存した検索機能」という超が付くほど手抜きな仕様だったりします。

思い起こせば、文字列検索の高速化にいろいろと試行錯誤した時期もありました。しかし最終的な実装に落とし込んで動かしてみると、データベースが超巨大になったり、思いのほか検索速度が上がらなかったり、イマイチだったんですね。

そんなわけで何年も試行錯誤を行った結果、高速文字列検索については挫折して一時期放置していたこともありました。

ただ、そんな中でも諦めたわけではなく、頭の片隅に置いて日々開発していたところ、ある時、「この方法でやればいけんじゃね?」というひらめきが浮かびました。それに従って実装したところ、思いのほかうまく実装できたので、そのままクラス化して再利用できるようにしました。

次の段階として、当初から念頭にあった「ソース検索」の高速化に利用しようと組み込み作業を行ったのですが、その時点ですぐには組み込めませんでした。

理由は、「ソース検索」が単純な文字列検索ではなかったからです。特定の文字列にマッチングするだけでなく、アンマッチの判定も必要ですし、比較範囲を指定した検索も必要だったからです。

当初はクラスを使って検索を実施した後で、再度「ソース検索」側で追加の処理を行うことも考えましたが、それでは二度手間ですし、何より弊社の汎用クラスとしての利便性を損うと考え、クラス側に条件式の機能を持たせることにしました。

結果的にうまく実装できましたが、そんなわけで今回実装した「条件式」は、実はTrinityの「ソース検索」への組み込みをスムーズにするために追加した機能だったりします。

プログラム部品としてよく出来たので、今回のバージョンでは「ソース検索」以外でも利用できるように実装しました。本当はこの機能をうまく使って、「フィールドネット」の高速化と併せてフリーコード化を進めようと思っていたのですが、残念ながら今回は間に合いませんでした。

もちろんこの機能の実装を諦めたわけではないので、他の実装方法も含めて今後も色々と試行錯誤していきたいと思っています。


気づきをもらい、コツコツ実装

 

第1回 開発について日々感じていること

第2回 開発した「日本語機能」への反応に開発者として思うこと

第3回 「ツールと設計書」の関係は「カーナビと地図」に似ている

第4回 「ホウレンソウ」は時代遅れというけれど

新着