OmegaTのチームプロジェクトでちょっとハマった話
最近お仕事でOmegaT:
を使い始めました。で、社内のGitLabをホストにしてチームプロジェクトを作ったのですが、若干ハマったのでここでメモっておきます。わかってみれば大したことではないんですけどねー。
なお検証したのは今のStandard VersionであるところのVersion 4.3.2です。Latest Versionではどうなのか確認してません。
結論から言うと:
ってーことです。以下時系列。
お断りですが、これ試してたのは会社環境で、この記事書いているのは個人PCなので、メッセージその他は記憶で書いてます。実際のものとは異なることはご了承くださいませ。
GitLabにpushしたリモートリポジトリと紐づけたチームプロジェクトがぶっ壊れる
(注:後から考えると、正確にはぶっ壊れてたわけじゃないんですが、そのときにはそう思ったんですよ……)
手元でOmegaTで翻訳できるプロジェクト作って、まあまあ快適に翻訳できるようになったわけです。
でもほかのメンバーでも作業できるようにするにはチームプロジェクトを作る必要があるらしい。さてどうやって作るのかな。で、ドキュメント調べたら:
あーふむふむ、要はGitリポジトリ作ってそこにいろいろぶち込んでpushして、それをチームプロジェクトとしてダウンロードすればいいのね*1。
で、手元のプロジェクトを git init
して一式コミットして、社内で立ってる、社内N/WからしかアクセスできないGitLabにリポジトリ作って、そこを git remote add origin git://
ってして push して、じゃあこれを「プロジェクト」>「チームプロジェクトのダウンロード」のURLに指定すればよいと。
……ん? 「.... Auth fail」??? どゆこと? 普通に自分がpushできてる自分のリモートリポジトリなんだから、認証に失敗するとかないと思うんですけど……。
まあとにかく、リポジトリがOmegaTからcloneできないってことね。なんだろう、もしかしてやり方がまずいのかな、一度OmegaTで読み込んでごにょごにょする必要があるってことなのかな。 ということで、チームプロジェクト化したと思われたローカルのプロジェクトをOmegaTで開いてみますと、
このチームプロジェクトはバージョン2*2 形式の古いやつだから、今の形式にします?
あ、なるほど、さっきのドキュメントは古いってことか……確かにホームに戻ると「OmegaT 3.1 - 取扱説明書」って書いてあるし。
まあでも移行機能ついてるんだ親切だな、ぽち……え。同じエラーで落ちる。そして、「サーバーと同期できませんでした」といって、OmegaTで開くこともできなくなりましたよ……と。え。マジで。
いやいやいやいや。大丈夫。Gitリポジトリなんだから中に入ってcheckoutなりなんなりすれば元に戻るでしょ……え? Gitリポジトリじゃなくなってる??? .git
ディレクトリがないじゃん。えーまじか。
……もちろん、リモートリポジトリからcloneしなおせばモノは残ってるわけですが、翻訳作業が進められなくなる。それは困る。で、ちゃんと調べることにしました。
チームプロジェクトでHTTPSプロトコル使うと動かない
まずは雑に "omegat git auth fail" とかでググる……けど、全然情報がない。
でまあもっと単純に "omegat team project" とかで検索すると……たとえばここ、を参照すると、 大体の例はHTTPSになってる……なるほど。そうなのかな。
じゃあ、URLに https://
を指定すれば……ぐぐ。エラーになりますね。
種を明かせばこれは本当に当たり前な話で、社内GitLabがオレオレ証明書だったから*3。
なので、普通に git clone とかも跳ねられちゃう。普段 git://
でしか使ってないから気づかなかったからというだけ。
Auth failの謎に迫る
しょうがない。このGitLabを使う以上はなんとかしてgitプロトコルを使うしかないわけで、そうなるとAuth Failの謎を解かなければいけません。でもググっても情報がない。
しかしですね、わたくし技術屋としてあるまじき見落としだったんですが、さっきのダイアログ、実は
jgit: .... Auth fail
ってなってたんですよね。jgitっていかにもJavaのgitライブラリじゃないですか。だからきっとこのダイアログはこいつが吐く例外メッセージとかをママ出してるんじゃないか。
ということで "jgit auth fail" でググると……色々出てきた。 で、ヒットした記事をチェックしたら、「鍵にパスフレーズありの場合はこういうコーディングでパスフレーズ渡さないとだめだよ」みたいなStackOverflawの記事を見かけました。 ん?パスフレーズあり?俺の鍵はもちろんパスフレーズありだよ。そしてOmegaTでパスフレーズ入れた記憶も、やっぱりないぞ……。
さてはということで "omegat ssh passphrase" とかで検索した……ら。
ちょっと古いけど(2015年)、やり取り見てると:
Keys with passphrases will be supported after this development hits trunk. In the meantime, you can use public key authentication now if you remove the passphrase from your key.
ってい書いてあって、
It is nonsense to remove passphrase.
うんうん、ナンセンス! と思ったんですが、どうなんだろ、2015年だしなあ、治ってるかもわからんけど……。
情報見当たらなかったのでまあ試してみようということで、パスフレーズなしSSH鍵ペアを生成しなおして、~/.ssh/config
でGitLabのときだけはそいつ使うようにした……ら。
無事OmegaTでも使えるようになりました! やった! ばんざい!
Macで同じことやると「invalid private key」と言われて動かない
で、同僚に「使えるようになったよー」といったら、「なんかうまく動かないんですけど……」とクレームが。
同僚はMacだから? なんだろ? と思いつつ私も検証機でMacあるので、やっぱりパスフレーズなし鍵ペアを使うように ~/.ssh/config
設定し、
リポジトリのcloneできることは確認して、オッケー、ではOmegaTで「チームプロジェクトのダウンロード」する……と、「jgit: ... invalid privatekey」とな。
あわてず騒がず "jgit invalid privatekey" でググりますと……
この記事がヒットしまして、要は:
- OpenSSHの7.8以降は
ssh-keygen
で生成するデフォルトの鍵ペアが ed25519 になりました - 判断するのは秘密鍵の頭が
-----BEGIN OPENSSH PRIVATE KEY-----
となってるかでわかる - 少なくともOmegaTのjgit(バージョンなのか使う側の実装なのか)ではこの形式の鍵が食えない
- なので以下のようにして鍵形式を切り替えてあげればOK
ssh-keygen -p -f 【鍵ファイル名】 -m pem -P "" -N ""
で、うまくいきました。
おまけ:環境によってはMac版OmegaTのJREありバージョンは動かない
これは私じゃなくて同僚がハマったんですが、OmegaT 4.3.2のJREありバージョンが起動時に例外吐いて死ぬという問題があるようです。
ぐぐったら上記JREありバージョンに同梱されてるOpenJDK 1.8.0 u201の問題みたいで、JREなしバージョン使うか、5.2.0ならJRE新しくなってるのでそれを使えばいいみたい。