Fesen

elasticsearchのライセンス変更問題でのFessの対応を始めています。elasticsearch 7.10.2をフォークして、Fess用の検索エンジンとして、Fesen (フェセン: Fess Search Engine)というのを作っています。

とりあえず、現時点ではビルドして、zipパッケージを作ると起動することができるようになりました。elasticsearchの本流は、Gradleを使っていますが、私が気持ちよくメンテできるようにしていくためにはMavenである必要があるため、Maven化しました。なので、必要なソースコードは持ってきている感じですが、ビルドの仕方は全く異なります。あとは、org.elasticsearchのパッケージですが、そこもorg.codelibs.fesenに変わります。起動するコマンドも./bin/fesenになりました。ほかには、Fess観点だとKibanaとか不要なので、いらないモジュールは外しておこうかなと思っています。

結構、ハマったのが、元のテストコードたちが循環参照している感じになっているので、そのままMavenに持ってきてマルチモジュールにするとテストを実行することができず…。その辺はプロファイルを設定して、コンパイルとテストが別々になるようにして、対応しました。ただ、一部、JarHellがどうしようもないのもあるので、そのテストなどはスキップしたりしましたが…。

あとは、rpmとdebのパッケージを作るようにすれば、一段落なので、ゴールはあと少しだと思います。Fess 13.11からはFesenがデフォルトになるように(たぶん、順調に)進行中です。

ライセンス問題へのFessの対応

ElasticsearchのライセンスがElastic LicenseとSSPLのデュアルライセンスになるということで、Fessへの影響について考えてみます。(別に私は法律家ではないので、私の理解が完全に正しいかは置いておいて…)

まず、Fessの利用者観点から考えると、ほぼすべての利用者は気にすることはない話かなと思います。サービスプロパイダで利用者にElasticsearchまで触れるようにしてしまっているとかのケースは検討だが必要だと思いますが、Fessの利用者ではこの可能性はほぼないのかなと思います。

次に、Fessを作るという開発者の観点から考えます。まずは前提として、Fess自体は今まで同様にApache Licenseを維持するということを前提に話を進めていきます。としたときに、現状ではいくつか課題があるかなと考えています。

  1. elasticsearch-moduleでMaven Centralに置けない
  2. elasticsearch-cluster-runnerが作れない
  3. Elasticsearchのコア機能の参照

まずは、今まで、いくつかのelasticsearchのJarファイルがMaven Centralに置かれていないので、Apacheライセンスだからelasticsearch-moduleでアップロードしていたのですが、ライセンス変更により、できるのかが怪しくなりました…(怪しいので、やらない)。

そして、それらのJarファイルがMaven Centralに置けないと、elasticsearch-cluster-runnerが作れなくなります。elasticsearch-cluster-runnerはFessで組み込みElasticsearchを動かしたり、ElasticsearchのAPIを使えるようにしてくれています。なので、これが使えなくなるとFessも作れない感じです。

ということに加えて、FessはTransportClient時代からElasticsearch APIを内部的に結構使っていたりするので、コードレベルでは依存度は高い感じで、SSPLのようなGPLから派生したライセンスだと、Fess自体もSSPLに変更しないと厳しい感じだと思います。

という感じで、開発者観点から考えると、わかっている範囲でも厳しい感じです。なので、ここ数日、どのように対応するかを検討していました。Solrに戻ることも案としては検討したのですが、結構な工数になり、短期では解決できなそうなので、現時点では

  1. elasticsearch 7.10.2をフォークして、デフォルトの検索エンジンとして利用する
  2. 利用者は、デフォルトの検索エンジン または elasticsearchを選択して利用する
  3. elasticsearchプラグインの依存度を減らす

を軸に変更して、Apacheライセンスを維持することを考えています。elasticsearchはフォークした後は、最新のElasticsearchとインターフェースを追随する実装は必要な気はするので、Elasticsearchの外部仕様をもとにFessで必要な機能だけは対応しようかなとは思っています。(AWSのOpen Distroがもっと頑張ってくれていれば、それをベースにとも考えたのですが、そんな感じでなくて、Open Distroも消えるのではないかなという気もしたので…)

あとは、Elasticsearchプラグインの依存を減らしてメンテ工数を下げていこうとも考えています。プラグインの依存度が下がれば、SaaSのelasticsearchとかも使えるようになる可能性もふえますし。

という感じで進んでいくと思うので、Fess 13.11から変わる予定で考えています。

eckctl

ElasticsearchをKubernetes上で便利に使えるものとして、Elastic Cloud on Kubernetes(ECK)があるけど、ローカル環境でも手軽にKubernetesクラスタを作って、そこでECKを動かせるようにしたいな、ということで、eckctlにまとめてみました。

手軽にKubernetesクラスタも作る必要があるので、eckctlではデフォルトでkindを利用することにしてます。なので、

$ ./eckctl create

とすると、ローカル環境にKubernetesクラスタができて、そこにECKを入れて、Elasticsearchクラスタができます。

サービス経由でアクセスするか、ポートフォワーディングで、

$ ./eckctl proxy

をして、別ターミナルで

$ ./eckctl curl https://localhost:9200/

みたいにするとElasticsearchのクラスタにアクセスできます。ECKのElasticsearchにはパスワードがかかっているので、eckctl経由にすることで、パスワードを付加してアクセスしています。

あとは、使い終わったら

$ ./eckctl delete

すれば、きれいに削除することができます。

使いながら、もう少し便利にしていこうかとは思いますが(ドキュメントを含めて…)、別にkindに依存しているわけではないので、そのうち、AWSやGCPにもデプロイできるようにしたいなとも思いますが、そこまで時間がないような気も…。とりあえず、FessのK8s対応が保留になっているので、eckctlベースに対応を進められないかなと考えています。

Fess 13.10.2のリリース

Fess 13.10.2をリリースしました。細々とした修正をしたリリースになります。

まず、#2507の話で、Tomcat 9.0.41に上げました。13.10.0のリリースのときに上げておきたかったのですが、依存関係のエラーになったので見送っていたのですが、見直したところ、今までがtomcat-jasperを使っていたのが良くなかったようで、組み込みTomcatなので、tomcat-embed-jasperに置き換えたら解決しました…。という感じで、正しい依存関係になった感じです。

次に、#2508では、FessでGCログを出すようにしていますが、ローテーションして保存しているファイルが結構、多すぎる感じがするので、減らしました。過去分は5ファイルくらい残っていれば十分かなと…。今まで多すぎた感があった。

#2510はMicrosoft系のシステムだと、大文字小文字の区別がゆるいシステムがあったりするので、それに対応するためにAzureから得られる権限情報を小文字にする設定を追加しました。デフォルトは無効になっているので、今までとデフォルトの動作は変わらないです。

#2511はラベルのログメッセージが適用されたかがわかりにくかったので、修正しました。

#2512は、前回のリリースあたりで、検索クエリーにファジーを加えましたが、prefix_lengthやtranspositionsとかのパラメータを指定できなかったので、一通り設定できるようにしました。ついでに、min.lengthを-1にすれば、ファジークエリーを無効にすることもできるようにしました。

あとは、#2513では、検索結果に緑色の文字列としているサイト情報部分の文字列の取得の仕方を改善しました。siteフィールドから値を取っているつもりだったのですが、検索結果の表示時にURLから生成する状態になっていたので、siteフィールドに値がある場合はそれを表示して、なければ、URLから生成にしました。

これら以外には、fess-crawlerもバージョンを上げたので、jcifs-ngから取り込んだ修正が入ったくらいです。いつもはelasticsearchがリリースされてからリリースするのですが、商用案件がいくつかあって、このリリースを使いたいというのもあり、elasticsearchのリリースを待たずにリリースしました。

今回は、修正内容について、コメントしてみました。時間があれば、次回もコメントしたいところではありますが、忙しければしないかも…。そんな感じではありますが、何かあれば、フォーラムをご利用ください。

株式会社コードリブズの1期目の振り返り

昨年の11月に株式会社コードリブズを法人化して、検索システムや機械学習関に関する業務をしてきて、1期目が無事に終わりました。1年という1つのサイクルを回すことで、いろいろと学びがあったかなと思います。法人化するモチベーションはいろいろとあると思いますが、法人化の方法とかを学校で教えてもらうわけでもないので、参考のためにエンジニア(?)が株式会社を作る流れも書いておこうと思います。一応、当たり前の話かとは思いますが、とりあえず、法人化的な感じは無理だと思うので、法人設立の事業計画は必要です。

株式会社の作り方はググれば手順とかが見つかると思いますが、会社設立フリーを利用すると必要なものや流れを教えてくれるので、その手順でやっていけば必要な資料などが含めて作成できます。会社名や事業内容は決めておくとして、その他の初期リソースとして必要になるのが

・住所
・電話番号
・資本金

あたりでしょうか。あとは、会社設立フリーの登録画面とかで、

・会社印鑑(会社設立フリー上で購入可能)
・電子公告(freee電子公告が利用可能。年間費用がかかる)

をどうするのかを求められます。それ以外の項目は、事情に合わせて決めれば良いと思います。項目の中で迷うのは決算期をいつにするか?とかでしょうか。私の場合は、初めに1年を回したかったので、10月決算にしましたが、特に困ったことがなかったので、これも好きなときにすれば良いかなと思います。

会社設立フリーで必要な項目を入力すると、会社設立フリー上で次の何をしろと指示が出るので、その流れで進めていけばよいです。まずは、定款認証をする必要があるので、申請をして、公証役場に行き、手続きをします。電子定款で作れば良いと思いますが、専門家チェックとかあったりするので、1〜2週間くらいかかると思います。あとは、資本金を定款を受け取った日以降で個人の銀行口座とかに入金して、通帳のコピーを取る必要があります(定款を受け取る前に入金をして失敗した…)。あとは登記書類を作って、法務局で手続きすれば登記されます(これも1週間くらいかかった気が…。確認事項が発生すると、電話がかかってくる)。

法務局での登記完了後、県税務署、市役所、社会保険事務所に行って手続きが必要です。あちこち行くのでちょっと面倒だと思います…。社会保険のは役員報酬などの給与を払い始める月からだったりするので、11月起業で翌年1月から給与を払うと形にずらすと、社会保険事務所は1月に来てねと追い返されます…。とはいえ、源泉徴収税の特例申請すると、半年単位の処理になるので、1月からにしたのは正解だったと思います。

という感じで、ここまでできれば、一区切りだと思いますが、ここまでで、25〜30万円くらいはかかります。これは、会社設立費用として精算すれば良いです。

このあと、困るのが法人の銀行口座の作成だと思います。簡単に作れるのかと思ったら、そうではなかった…。1年以上とかフリーランスで、確定申告した上で、法人を作れば、難易度が下がるのかもしれないが、そのようなものがない状態で作るのは、結構大変…。ネット系銀行は却下されて、作れないと思う…。なので、まずは、都市銀行など、個人で使っているところとかで作るのが良いのではなかろうか。ジャパンネット銀行に申請したら却下されたので、事業計画書とか作成して万全の準備をして、利用している都市銀行に申し込んで無事に作成できた。法人の銀行口座がないとなかなか厳しいものがあるし。

銀行口座を作るときもそうなのだが、起業前後にあったほうが良いものとして、まさかの企業のホームページというものがある。株式会社コードリブズはcodelibs.coを作っておくことで、いろいろな申請や契約関連で活躍している。なので、会社のホームページは作っておいたほうが良い。意味あるの?という疑問があるが、申請書とかで普通に記入を求められたりするので、作るべきものかと思う。

あとは、便利なものとしては、法人用のクレジットカードを作っておけば、ネット系サービスの支払いが楽になる。freeeで企業直後でもクレジットカードを作れるものがあるので、そこで作っておくと、いろいろと楽になると思う。

ここまで来れば、企業として回していけると思う。会社設立フリーを使った流れで、会計フリーを使って、お金周りの管理をしているけど、使い方に慣れるまではそこそこつらい気がする。ただ、ないとよりつらいと思うから、会計ソフトは必要なのだとは思うけど、慣れるのを頑張るしかない。あとは、ググって調べると、税理士なしでも何とかなるとか見たりするけど、税理士は必須だと思う。freeeも税理士紹介というのをやっているので、それを利用して、税理士さんと契約しました。なので、税理士さんとはfreeeを見ながら、zoomで話して会計処理してます。税理士さんはいろいろと教えてくれますし、税理士なしというのは無理だと思います。そんな感じで、最近は、会計フリーにも慣れてきたような気もします。

その他のこととしては

・ネット系銀行は便利
・二以上事業所勤務だと面倒くさい
・eLTaxの利用
・電子公告
・勘定科目がわからない
・freeeのサービス内容はその時点のもの

とかかな。税金まわりのことは税理士さんに言われたとおりに処理すれば良いし。

まず、ネット系銀行にしないと、会計フリーとの連携ができないので(都市銀行でもネット契約にすれば良いけど、小企業には高い…)、事業開始から売上ができたときに楽天銀行で開設しました。これで結構楽になった。

次に、私は二以上事業所勤務で処理しているのですが、こういう人がいると、社会保険の金額情報が給与計算に間に合わなかったりして、預り金にして来月処理みたいな面倒くさい処理が発生するので大変だった。この辺も給与計算に慣れていないと、かなり悩むと思います…。

eLTaxも登録はしたのですが、その後は税理士さんにおまかせしてしまっています…。

電子公告と言っても、HTMLを置いておくだけのように見えるのですが、認証されたものでなければダメらしくて、認証するにも数十万円かかる…。電子でない、新聞とかに載せるにしても費用が必要だし、個人的には判子押印と同様な疑問がある制度な気がしてます…(個人の感想)。ということで、freeeの電子公告を年額で払って、使っています。

勘定科目については、ググって調べて、会計フリーで入力してます。これは、ググればだいたいわかるから、ググるだけですね。

freeeのサービス内容ですが、数年に一度くらいのペースで見直されていると思うので、知り合いとかに聞いていた情報と、サービス内容や金額が違うみたいなことがありました。なので、freeeはサービス内容とかを見直して、ちょっと値上げとかしていたりするようにも思います。でも、契約した時点の金額が続くと思うので、今のところ、契約後の値上げには遭遇していません。

その他で会社運営で利用しているサービスなどは以下の感じですね。

・会計ソフト:会計フリー
・電子公告:会社設立フリー
・給与計算:Free Way
・メール等: Google Workspace (旧G Suite)
・ドメイン: お名前.com
・電話: Skype番号
・ホスティング: WebARENA VPCクラウド(会社ホームページの置き場とか)

という感じで、やってみないとわからない手続きが多かった気がしますが、freeeを使って、楽をできている部分もあったかなと思います。コロナ問題などもあり、うまくいかなかった部分もあったりする1期目だった気もしますが、株式会社コードリブズとしては、グローバルにプロダクトを作っていける会社というものを目指して入るので、2期目はより計画的に新しいことにチャレンジしていけるようにしていきたいと思います。

最後になりますが、検索システムやAI(機械学習やレコメンド)の課題がありましたら、気軽にご相談ください。