@Yuji Ohata さん、

リンクしていただいた回答が、現状対応できる方法だと思います。

PythonでObjectScriptと同じレベルのことができるように開発を続けているようですので、今後の拡張に期待しつつ、現在はこの方法でお願いできたらと思います。 

鳥飼先生、

貴重なご投稿ありがとうございます。これからDockerに取り組もうとしているコミュニティの方々に大変役に立つ記事だと思います。

さて、すでにご存知かもしれませんが、1点念のためにお伝えした方が良いと思い、返信します。

docker環境でのシステムデータベースや設定ファイルは、コンテナの内部に作成されますので、docker rm コマンドでコンテナを削除すれば、コンテナstartから更新された設定などもなくなってしまいます。また、dockerコンテナ内のファイルとして作成したデータベースも同様です。

システムデータベースをコンテナの外部に構築し、コンテナのライフサイクルを越えてシステムデータベースや各種設定を維持するには、"Durable %SYS"と呼ばれる仕組みを使います。

具体的には、

sudo docker run --name iris --detach --publish 52773:52773 --volume /home/usr/docker/iris2020.3:/external --env ISC_DATA_DIRECTORY=/external/iris intersystems/irishealth-ml:2020.3.0.304.0 --key /external/iris.key

と ISC_DATA_DIRECTORY環境変数に外部ファイルシステムのディレクトリを指定します。そうすると、コンテナをrmした場合や、イメージを更新して新たにコンテナを作成した場合も、システムデータベースや設定ファイルの内容はが引き継がれます。

自分でデーターベースを作成する際に、/externalファイルシステムに作成すると、そのデータベースもコンテナのライフサイクルを越えて保持されます。

以上、念のためご確認ください。

KURAUCHIさん、こんにちは。

私の知る限り既存のものはありませんので、簡単に自作してみました。

方針としては、UNICODEでカナ→ローマ字のコードに規則性はありませんので、面倒ですがテーブルを作成して変換するしかないと思います。

サンプルでは、促音や拗音にできる限り対処したつもりですが、抜けがあるかもしれません。

もし、このメソッドをSample.Utilsクラスに保存したとすれば、次のように実行できます。

USER>write ##class(Sample.Utils).cvtKanaToRomaji("コッチノサンプルデドウデショウ?")
kocchinosanpurudedoudeshou?
USER>
ClassMethod cvtKanaToRomaji(inStr As %String) As %String
{

    // カナテーブル
    Set kanaTbl = $lb("ア", "イ", "ウ", "エ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ", "ソ")
    Set kanaTbl = kanaTbl_$lb("タ", "チ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ヘ", "ホ")
    Set kanaTbl = kanaTbl_$lb("マ", "ミ", "ム", "メ", "モ", "ヤ", "ユ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ヲ", "ン")
    Set kanaTbl = kanaTbl_$lb("ガ", "ギ", "グ", "ゲ", "ゴ", "ザ", "ジ", "ズ", "ゼ", "ゾ", "ダ", "ヂ", "ヅ", "デ", "ド")
    Set kanaTbl = kanaTbl_$lb("バ", "ビ", "ブ", "ベ", "ボ", "パ", "ピ", "プ", "ペ", "ポ", "ー")

    // ローマ字テーブル
    Set romajiTbl = $lb("a", "i", "u", "e", "o", "ka", "ki", "ku", "ke", "ko", "sa", "shi", "su", "se", "so")
    Set romajiTbl = romajiTbl_$lb("ta", "chi", "tsu", "te", "to", "na", "ni", "nu", "ne", "no", "ha", "hi", "fu", "he", "ho")
    Set romajiTbl = romajiTbl_$lb("ma", "mi", "mu", "me", "mo", "ya", "yu", "yo", "ra", "ri", "ru", "re", "ro", "wa", "wo", "n")
    Set romajiTbl = romajiTbl_$lb("ga", "gi", "gu", "ge", "go", "za", "ji", "zu", "ze", "zo", "da", "di", "du", "de", "do")
    Set romajiTbl = romajiTbl_$lb("ba", "bi", "bu", "be", "bo", "pa", "pi", "pu", "pe", "po", "h")

    // 拗音用カナテーブル
    Set kanaTbl = kanaTbl_$lb("キャ", "キュ", "キョ", "シャ", "シュ", "ショ", "チャ", "チュ", "チョ")
    Set kanaTbl = kanaTbl_$lb("ニャ", "ニュ", "ニョ", "ヒャ", "ヒュ", "ヒョ", "ミャ", "ミュ", "ミョ", "リャ", "リュ", "リョ")
    Set kanaTbl = kanaTbl_$lb("ギャ", "ギュ", "ギョ", "ジャ", "ジュ", "ジョ", "ヂャ", "ヂュ", "ヂョ", "ビャ", "ビュ", "ビョ", "ピャ", "ピュ", "ピョ")
    
    // 拗音用ローマ字テーブル
    Set romajiTbl = romajiTbl_$lb("kya", "kyu", "kyo", "sha", "shu", "sho", "cha", "chu", "cho")
    Set romajiTbl = romajiTbl_$lb("nya", "nyu", "nyo", "hya", "hyu", "hyo", "mya", "myu", "myo", "rya", "ryu", "ryo")
    Set romajiTbl = romajiTbl_$lb("gya", "gyu", "gyo", "ja", "ju", "jo", "dya", "dyu", "dyo", "bya", "byu", "byo", "pya", "pyu", "pyo")
 
    Set outStr = ""
    Set sokuonFlag = 0
    For i = 1:1:$l(inStr) {
        Set ch = $e(inStr, i)

        // 促音
        if ch = "ッ" {
            Set sokuonFlag = 1
            Continue
        }

        // 次に拗音がくれば、くっつける
        Set nxtch = $e(inStr, i + 1)
        if (nxtch = "ャ") || (nxtch = "ュ") || (nxtch = "ョ")  {
            Set ch = ch_nxtch
            Set i = i + 1
        }

        // カナテーブルにある文字であれば、対応するローマ字を出力
        Set idx = $lf(kanaTbl, ch)
        if idx > 0 {
            Set och = $li(romajiTbl, idx)
            
            // 促音の次であれば子音を重ねる
            if (sokuonFlag = 1) && ($l(och) > 1) {
                Set och = $e(och, 1)_och
            }
 
 
        } Else {
            Set och = ch
        }
        Set outStr = outStr_och

        Set sokuonFlag = 0
    }

    Quit outStr
}

ご参考になれば幸いです。