XPagesで文字化け? toJson() を使ったらうまくいった話
XPagesでサーバーサイドの文字列をクライアントサイドJavaScriptへ渡す際、
文字列の内容によってはJavaScriptが正しく動作しなくなることがあります。
特に、以下のような文字が含まれている場合は注意が必要です。
- ダブルクォート
" - シングルクォート
' - バックスラッシュ
\ - 改行
- タブ
- 日本語などのUnicode文字
今回、XPagesで文字列をJavaScriptへ渡す処理を見直したところ、
toJson() を使用することで安全に受け渡せることが分かりました。
もともとの処理
例えば、SSJS側に以下のような関数があるとします。
function getSampleText() {
return "商品名:テスト商品";
}
この値をクライアントサイドJavaScriptへ渡したい場合、
単純に以下のように記述したくなります。
#{javascript:getSampleText()}
文字列が単純な内容であれば、問題なく動作する場合もあります。
しかし、実際のデータでは文字列内に改行やダブルクォートなどが含まれることがあります。
例えば以下のような文字列です。
商品名:テスト商品
備考:"特価品"
この文字列をそのままJavaScriptへ埋め込もうとすると、
生成されるJavaScriptが正しい構文にならない可能性があります。
なぜ問題が発生するのか
JavaScriptで文字列を扱う場合、文字列は通常以下のように記述します。
var text = "テスト";
しかし、文字列自体にダブルクォートが含まれていると、
例えば以下のような状態になる可能性があります。
var text = "備考:"特価品"";
これでは、JavaScriptがどこまでを文字列として扱えばよいのか判断できません。
そのため、JavaScriptエラーの原因になります。
また、改行やバックスラッシュなども、
そのままJavaScriptソースへ埋め込むと問題になる場合があります。
つまり、
サーバー側では正常な文字列でも、JavaScriptのソースコードとして直接埋め込むと壊れることがある
ということです。
toJson() を使う
そこで使用できるのがXPagesの toJson() です。
今回の記述は以下です。
#{javascript:toJson(getSampleText())};
getSampleText() が返した文字列を、
toJson() に渡しています。
例えば元の文字列が、
商品名:テスト商品
備考:"特価品"
だった場合、JavaScriptへ渡す際には概念的に以下のような形式になります。
"商品名:テスト商品\n備考:\"特価品\""
ダブルクォートは \"、
改行は \n のように、
JavaScriptやJSONで安全に扱える形式へエスケープされます。
その結果、ブラウザ側では例えば以下のような正常なJavaScriptとして扱うことができます。
var sampleText = "商品名:テスト商品\n備考:\"特価品\"";
JavaScriptが実際に値を取得すると、中身は元通りです。
商品名:テスト商品
備考:"特価品"
処理の流れ
getSampleText()
↓
サーバー側では正常な文字列
商品名:テスト商品
備考:"特価品"
↓
toJson()
"商品名:テスト商品\n備考:\"特価品\""
↓
ブラウザへ出力
↓
JavaScriptが安全に解釈
↓
元の文字列として利用できる
つまり toJson() は、簡単に言うと、
「この文字列をJavaScriptに渡してもぶっ壊れない形にするマン」
と考えると分かりやすいです。
toJson() は文字化けを直す処理ではない
ここは注意が必要です。
toJson() を使用した結果、日本語の表示が正常になり、
「toJson() で文字化けが直った」
ように見える場合があります。
しかし、厳密には toJson() は文字コード変換を行うための関数ではありません。
例えば getSampleText() の時点で、すでに以下のように文字化けしている場合、
繧ケ繝医Μ繝ウ繧ー
以下のようにしても、元の日本語へ復元されるわけではありません。
toJson(getSampleText())
UTF-8やShift_JISなど、文字コードの不一致が原因の場合は、
ファイル読み込み処理やHTTPレスポンスなど、別の箇所を確認する必要があります。
今回うまくいった理由
今回の場合、
getSampleText() で取得した段階では日本語は正常でした。
問題は、その文字列をXPagesからブラウザ側のJavaScriptへ渡す部分にありました。
そこで、
#{javascript:toJson(getSampleText())};
と変更したことで、以下のような処理が行われます。
- JavaScript用の文字列として扱える形になる
- ダブルクォートがエスケープされる
- 改行が
\nのような形に変換される - バックスラッシュなども適切に処理される
- JavaScript側で安全に文字列として解釈できる
その結果、見た目としては
「文字化けが直った」
ように見えた、ということになります。
例えばこんな文字列でも安全になる
例えば以下のようなデータがあるとします。
担当者:"田中"
保存先:C:\work\test
備考:
1行目
2行目
このような文字列をそのままJavaScriptへ渡すのは少し危険です。
toJson() を通すと、概念的には以下のようになります。
"担当者:\"田中\"\n保存先:C:\\work\\test\n備考:\n1行目\n2行目"
これならJavaScriptの文字列として安全に扱うことができます。
まとめ
XPagesのサーバーサイド処理で取得した文字列を、
クライアントサイドJavaScriptへ渡す場合は、
#{javascript:toJson(getSampleText())}
のように toJson() を使用すると安全です。
特に、外部ファイルやDBなどから取得した文字列には、
日本語、改行、ダブルクォート、バックスラッシュなどが含まれることがあります。
そのままJavaScriptへ埋め込むよりも、
toJson() を通したほうが安全に扱えます。
ただし、toJson() は文字化けを修復する関数ではありません。
役割としては、
サーバー側の文字列を、JavaScript側で安全に解釈できるJSON形式の文字列へ変換する
という理解が分かりやすいと思います。
XPagesで
「サーバー側では正常なのにJavaScriptへ渡すとうまく表示されない」
「クォートや改行が入るとJavaScriptエラーになる」
といった場合には、toJson() を試してみる価値があります。
2026年08月18日

こんにちは、米原です。
今回は、Notes/Dominoのコミュニティイベント
「DominoHub 2026」の
名古屋・大阪開催についてご紹介します。
今年のDominoHubは、6月のオンライン開催、7月の東京開催に続き、
名古屋・大阪でも開催されます!
Notes/Dominoを現在利用されている方はもちろん、
今後の活用方法を検討されている方や、
最新情報を知りたい方にもおすすめのイベントです。
DominoHub 2026 名古屋
会場:
ツドイコ 名駅東 カンファレンスセンター
愛知県名古屋市中村区名駅3-21-7 名古屋三交ビル2F
開場:13時00分
イベント:13時30分 ~ 17時15分
懇親会:17時30分 ~ 19時00分
名古屋では、今回初めてDominoHubが開催されます!
HCL Notes/Dominoに関するセッションや、
参加者同士で情報交換できる機会も予定されています。
名古屋周辺のNotes/Dominoユーザーの皆さま、
ぜひこの機会に参加してみてはいかがでしょうか。
DominoHub 2026 大阪
会場:
APイノゲート大阪
大阪府大阪市北区梅田3丁目2-123 イノゲート大阪 11F
開場:12時30分
イベント:13時00分 ~ 17時30分
懇親会:17時30分 ~ 19時00分
大阪会場はJR大阪駅 西口直結という、
とてもアクセスしやすい会場です。
こちらでもHCL Notes/Dominoに関するさまざまなセッションや、
参加者同士の交流企画が予定されています。
名古屋・大阪ともに、セッションで最新情報を得られるだけでなく、
Notes/Dominoを利用しているユーザーや、
HCLアンバサダー、各社の皆さまと直接お話しできる機会でもあります。
普段なかなか聞けない活用方法や、他社での事例、
これからのNotes/Dominoについて情報交換してみてはいかがでしょうか。
セッションを楽しみながら、
新しい情報やつながりを見つけていただければと思います。
ぜひDominoHub 2026へご参加ください!
それでは皆さまのご参加をお待ちしております。
2026年08月10日

こんにちは、米原です。
本日は6月、7月に開催される、日本最大級のNotes/DominoイベントDominoHub2026 (オンライン)のご紹介です。
今年のテーマは!
「未来をソウゾウせよ」
~「想像」が「創造」に変わるとき、未来は動き出す~
HCL Dominoは企業の業務効率化やコラボレーションの促進に貢献してきた信頼にあるソフトウェアです。
DominoHubでは、これまで以上にDominoの可能性を引き出し参会者に楽しさと驚きを提供します。
DominoHub詳細・申込はこちら
- 日程: 2026年6月17日(水) :オンラインイベント
- テーマ: 「未来をソウゾウせよ」~「想像」が「創造」に変わるとき、未来は動き出す~
- 主催: HCLアンバサダー & 有志メンバー
- 費用: 無料(事前登録制)
- 場所・形式:
【2026年6月17日(水)】 オンライン – 10時00分開始~17時50分終了(予定)
- こんな人におすすめ:
・Notes/Dominoを継続的に積極利用するユーザー
・Notes/Dominoから移行検討、情報収集をしているユーザー
・Notes/Dominoから移行をして問題を抱えているユーザー
DominoHub オンラインの注目ポイント
多彩なセッション
HCLアンバサダー、有志メンバー、HCL Software様からのキーセッション、など多彩なセッションが目白押し!もちろんDominoHubでしか聞けないセッションも多数あります!
オンラインセッション
どうでしょうか、ここまでで少しでも興味を持たれましたら、オンラインのご視聴してみてはどうでしょうか。
DominoHub詳細・申込はこちら
東京開催もございます。東京開催の詳細はまた後程。。。
【2026年7月10日(金)】 東京会場
・東京会場:シャルマンシーナ東京
東京都渋谷区新宮前4-5-6・開場:9時30分、10時00分 開始~16時40分 終了(予定)
・懇親会 (同会場、無料):17時00分開始~19時00分終了(予定)
それでは皆様のご参加をお待ちしております。
2026年06月06日
HCL様よりメールが届き、田付、米原が2026 HCL Ambassadorに任命されました。
HCL Lifetime Ambassadorの加藤を含めると弊社から昨年に続き3名がHCLアンバサダーとして任命されました。
なお、日本から選出された2026年 HCL Ambassadorは以下の11名です、前年度同様、多数任命されました。
■ HCLアンバサダー グローバルページでの発表: https://www.hcl-software.com/jp/about/hcl-ambassadors/class-of-2026
HCL Ambassador 2026に任命されたのは以下11名の皆様です。

ケートリック株式会社 加藤 満 氏 https://notesdominoliaison.blogspot.com/

阿部 覚 氏 http://abesat.blog.jp/
中野 晴幸 氏 https://harunakano.blogspot.com/
株式会社エフ 御代 政彦 氏 https://guylocke.blogspot.com/
ケートリック株式会社 田付 和慶 ケートリック 株式会社 米原 和之 https://www.ktrick.com/blog/
ソフトバンク株式会社 中山 達嗣 氏
広瀬化学薬品株式会社 萩原 健補 氏 http://www.tanuchi.com/
株式会社フィオーレ 林和正 氏 https://note.com/dominolab/
株式会社 プロシード 浜 真行 氏 https://www.denaoshidomino.com/
MiscWorkshopsOSAKA 野村 知也 氏 https://miscworkshops.com/
任命された皆様おめでとうございます!
「ノーツコンソーシアム」(https://www.notescons.gr.jp/)などをはじめコミュニティーへ以前より積極的に貢献していきたいと思っています。また、HCLアンバサダーとDomino大好きな有志者が一丸となり、2025年に続き、Notes/Dominoのコミュニティイベント「DominoHub 2026」(https://www.dominohub.net/)の開催を現在計画中ですので続報にご期待ください。
2026年03月01日
対話型でフィールド値を一括変更
ダウンロードしてすぐに使えます
Domino Designerで開き、「コード」⇒ 「新規エージェント」からLotusScriptエージェントを作成し、コードを全て貼り付けてご利用ください。
Notes/Domino を運用していると、避けて通れないのがフィールド値の修正作業です。
「入力ミスに気づいたけど、対象文書が200件ある…」 「マイグレーションで型がズレてしまった…」 「Names フィールドが Abbreviated のまま保存されていて検索に引っかからない…」
こうした場面で、文書を1件ずつ開いて直していませんか?
今回公開するエージェントは、そんな地道な修正作業を対話形式でまとめて片付けるためのツールです。
どんなエージェント?
ひと言でいえば、選択した複数文書のフィールドを「値」と「データタイプ」の両面から対話的に書き換えるエージェントです。
ビューで文書を選択して実行すると、InputBox と MsgBox の問いかけに答えていくだけで、フィールドの中身を自由に変更できます。
できること
1. フィールド値の変更
もっとも基本的な機能です。指定したフィールドに対して新しい値を入力し、選択文書へ一括で反映します。テキスト・数値・日時のいずれにも対応しています。
2. データタイプの変換
「テキストとして保存されている数値を Number 型に直したい」といったケースに対応します。変換先として以下の6種類が選べます。
- Text
- Number
- DateTime
- TextList(カンマ区切り → 文字列配列)
- NumberList(カンマ区切り → 数値配列)
- Names系(Names / Readers / Authors)
3. Names・Readers・Authors の正規化
Names 系フィールドを選んだ場合、値を自動で Canonical 形式(CN=山田太郎/OU=Dev/O=Example)に変換したうえで、IsNames / IsReaders / IsAuthors フラグを正しくセットします。
「Abbreviated で入ってしまった名前を Canonical に統一したい」という場面で重宝します。
4. 複数値(配列)の入力
入力値にカンマが含まれている場合、「複数値として扱いますか?」と確認が入ります。「はい」を選べば TextList や NumberList として保存されるので、わざわざ @式やスクリプトを書く必要がありません。
5. 一括適用 or 個別入力の選択
1件目の文書で入力した内容を残りの文書すべてにそのまま適用するか、1件ずつ別の値を入力するかを選べます。
「全部同じ値に揃えたい」ときも、「文書ごとに違う値を入れたい」ときも、1つのエージェントで対応できます。
6. フィールドの削除と空白セット
値の入力欄を空のまま確定すると、「フィールドを削除するか」「空文字をセットするか」を選択できます。不要フィールドの掃除にも使えます。
7. 存在しないフィールドの新規作成
対象文書にフィールドが見つからない場合でも、型を指定して新たに作成できます。フォーム設計を変えずにフィールドを追加したい場面で便利です。
処理の流れ(ざっくり)
- フィールド名を入力 → 存在チェック(なければ型を選んで新規作成)
- 新しい値を入力 → 空ならフィールド削除 or 空白セットを選択
- データタイプ変更の確認 → 必要なら変換先の型を指定
- カンマの有無で複数値判定
- 1件目を保存
- 2件目以降 → 一括適用 or 個別入力を選択して処理
各ステップで「キャンセル」を選べば、未保存の文書に影響を与えずに中止できます。
こんなときに使えます
| シーン | 具体例 |
|---|---|
| 誤入力の一括修正 | 大量文書のステータスフィールドを間違えた値で登録してしまった |
| Names フィールドの正規化 | Abbreviated で保存された名前を Canonical に揃えたい |
| マイグレーション後の型修正 | テキストで移行された日付フィールドを DateTime に戻したい |
| 不要フィールドの一括削除 | 旧フォームの残骸フィールドをまとめて消したい |
| テスト・検証 | 開発中にフィールド値を素早く差し替えて動作確認したい |
注意点
- 一括適用では全文書が同じ値に上書きされます。 文書ごとに異なる値を保持したまま型だけ変えたい場合は、別途「データタイプ一括変換」エージェントの使用をおすすめします。(後日公開予定)
- 途中でキャンセルした場合、まだ保存されていない文書は変更されません。
- 保存時に
ComputeWithFormを実行するため、フォームの入力規則や計算フィールドが反映されます。意図しないフィールド変更が起きないか、事前にテスト文書で確認してください。
文書フィールド値 一括変更エージェント フローチャート
ダイアログ(InputBox / MsgBox)の流れを中心に記載
「変更するフィールド名を入力」"/] A -->|空| Z1([キャンセル終了]) A -->|入力あり| B{フィールドが存在する?} B -->|No| B1[/"② InputBox
「フィールド型を選択」
1=Text 2=Number 3=DateTime
4=Names 5=Readers 6=Authors"/] B1 -->|空 or 無効| Z1 B1 -->|有効| C B -->|Yes| C C[/"③ InputBox
「変更する値を入力」
(現在値が初期表示)"/] C -->|空| D C -->|入力あり| E D{{"④ MsgBox(はい/いいえ/キャンセル)
「フィールドを削除しますか?」
はい=削除 / いいえ=空白セット"}} D -->|キャンセル| Z1 D -->|はい:削除| U1 D -->|いいえ:空白セット| E E{{"⑤ MsgBox(はい/いいえ/キャンセル)
「データタイプを変更しますか?」"}} E -->|キャンセル| Z1 E -->|いいえ:変更しない| F E -->|はい| E1[/"⑥ InputBox
「変更後タイプ番号」
1=Text 2=Number 3=DateTime
4=TextList 5=NumberList 6=Names系"/] E1 -->|Names系| E2[/"⑦ InputBox
「1=Names 2=Readers 3=Authors」"/] E2 --> F E1 -->|Text〜NumberList| F F{カンマを含む?} F -->|No| U1 F -->|Yes| G{{"⑧ MsgBox(はい/いいえ/キャンセル)
「複数値として扱いますか?」"}} G -->|キャンセル| Z1 G -->|はい or いいえ| U1 U1["1件目の文書を保存"] U1 --> H{文書は1件だけ?} H -->|Yes| Z2([完了:1件処理済み]) H -->|No| I{{"⑨ MsgBox(はい/いいえ/キャンセル)
「この値を他の文書にも適用?」
はい=一括 / いいえ=個別"}} I -->|キャンセル| Z1 I -->|はい:一括| J["2件目〜最終文書に
同じ値・型で一括保存"] J --> Z3([完了:全件処理済み]) I -->|いいえ:個別| K["文書ごとに ③〜⑧ を繰り返し
(個別に値入力・型変換・保存)"] K --> Z3 %% ===== style ===== style A fill:#4361ee,color:#fff,stroke:#3a56d4 style B1 fill:#4361ee,color:#fff,stroke:#3a56d4 style C fill:#4361ee,color:#fff,stroke:#3a56d4 style E1 fill:#4361ee,color:#fff,stroke:#3a56d4 style E2 fill:#4361ee,color:#fff,stroke:#3a56d4 style D fill:#e76f51,color:#fff,stroke:#d4573f style E fill:#e76f51,color:#fff,stroke:#d4573f style G fill:#e76f51,color:#fff,stroke:#d4573f style I fill:#e76f51,color:#fff,stroke:#d4573f style U1 fill:#2a9d8f,color:#fff,stroke:#238377 style J fill:#2a9d8f,color:#fff,stroke:#238377 style K fill:#2a9d8f,color:#fff,stroke:#238377 style Z1 fill:#6c757d,color:#fff,stroke:#5a6268 style Z2 fill:#1a1a2e,color:#fff,stroke:#12121f style Z3 fill:#1a1a2e,color:#fff,stroke:#12121f style Start fill:#1a1a2e,color:#fff,stroke:#12121f
%REM
' ================================================================
' エージェント名:文書フィールド値変更(対話型)
'
' 【概要】
' 選択した複数の Notes 文書に対して、指定フィールドの
' 「値」および「データタイプ」を対話形式で変更できるエージェントです。
'
' 1件目の文書で入力した値を、残りの文書へ一括適用することも、
' 文書ごとに個別入力することも可能です。
'
' フィールドが存在しない文書に対しては、型を指定して新規作成できます。
'
'
' ================================================================
' 【本エージェントの特徴】
'
' ● 文書のフィールド値をユーザーが入力して変更できる
' ● フィールドのデータタイプ(Text/Number/DateTime など)の変更も可能
' ● Names/Readers/Authors フィールドを Canonical 化して正しく扱える
' ● 複数の文書に対して一括変更 or 個別変更 を選択できる
' ● 空文字入力時は「削除」「空白セット」「キャンセル」を選択可能
' ● 型変換を行うかどうかの確認ダイアログ付き
' ● 配列(TextList, NumberList)などの複数値も扱える
'
'
' ================================================================
' 【本エージェントと「データタイプ一括変換」エージェントの違い】
'
' ■ 本エージェント(データ修正エージェント)
' - フィールドの「値」と「データタイプ」を両方変更することができる
' - 1件目の文書に入力した値を、残り文書に一括で適用するため「型だけ変えたい」用途には不向き
'
' ◎ 注意点
' 一括変更の場合、ユーザーが入力した新しい値で全文書の値が上書きされるため
' 文書間でフィールド値の差異をそのまま残すことはできない
' ■ 使い分けの指針
' - 文書の値そのものを修正したいとき → 本エージェント
'
' - 文書間で値は保持したまま、型だけそろえたいとき
' → 「データタイプ一括変換」エージェントを使用すること
'
'
' ================================================================
' 【処理の流れ】
'
' ■ 1. 変更対象のフィールド名を InputBox で入力
'
' ■ 2. 最初の文書を取得し、フィールドの存在を確認
'
' ● 存在する場合:
' - フィールドの型(Text / Number / DateTime / その他)を判別
' - 現在の値を MSG_def として入力欄の初期値に設定
'
' ● 存在しない場合:
' - ユーザーにフィールド型を選ばせる
' 1=Text, 2=Number, 3=DateTime,
' 4=Names, 5=Readers, 6=Authors
'
' - 選択された型でフィールドを作成予定として扱う
'
'
' ■ 3. 1件目の文書に対する値入力
'
' - InputBox で新しい値を入力させる
'
' ● 入力が空の場合(キャンセル含む)
' → 「フィールド削除」「空白セット」「キャンセル」を選択
'
' → 「空白セット」の場合のみ、型変換確認(ConvertDataType)を実行
'
' ● 入力値がある場合
' → 型変換するかどうか確認(はい / いいえ / キャンセル)
' → 「はい」の場合は ConvertDataType を実行し型変換
'
' ● カンマが含まれる場合
' → 複数値として扱うかを確認
'
' ■ 4. 1件目の文書を UpdateDocument で保存
'
' ■ 5. 2件目以降の処理
'
' ● 一括適用するかどうか確認
' 「はい」 → 1件目の値・型をすべての文書に適用
' 「いいえ」 → 文書ごとに個別入力
' 「キャンセル」→ 処理中止
'
' ● 個別入力の場合も 1件目と同様の手順で処理
'
'
' ================================================================
' 【ConvertDataType の仕様】
'
' ● ユーザーに型変換を行うかどうか確認
' → 「はい」の場合のみ型変換
'
' ● 変換先型は以下から選択:
' 1 = Text
' 2 = Number
' 3 = DateTime
' 4 = TextList(文字列配列)
' 5 = NumberList(数値配列)
' 6 = Names系(別途 Names/Readers/Authors を選択)
'
' ● TextList / NumberList の変換規則
' - カンマ区切りで配列化
' - カンマ無しでも単一要素配列にする
'
' ● Names系変換規則
' - Canonical 化し、item.IsNames / IsReaders / IsAuthors を正しく設定
' - 名前型で複数値がある場合もすべて Canonical 化
'
'
' ================================================================
' 【UpdateDocument の仕様】
'
' ● removeCheck の値に応じて処理
' 6 = フィールド削除
' 7 = 空白セット
' 0 = 通常保存
'
' ● Names/Readers/Authors の場合:
' ・NotesName().Canonical に変換
' ・item.IsNames / IsReaders / IsAuthors を設定
'
' ● 通常の型:
' 1280 = Text
' 768 = Number
' 1024 = DateTime
'
' ● 配列もそのまま保存可能(TextList, NumberList)
'
' ● 保存前に doc.ComputeWithForm を実行し、計算式反映
'
'
' ================================================================
' 【エラー対策と型安全性】
'
' ● Split を行う時は常に 1次元配列に統一
' ● NumberList はすべて CDbl で精査
' ● Names 系は常に Canonical へ統一
' ● 変換不可能な値(数値でない、日時でない)があればキャンセル
'
'
' ================================================================
' 【このエージェントが適している用途】
'
' ● フィールド名を間違えて大量文書に誤入力してしまった時の修正
' ● Names 系フィールドの変換(Notes → Canonical の統一)
' ● 文書マイグレーション時のフィールド型修正
' ● テキスト・複数値の一括編集
'
'
' ================================================================
' 【注意事項】
'
' ● 途中でキャンセルした場合、未保存文書の変更は行われない
' ● 一括変更の際、型と Names 属性も引き継がれる
' ● 変換できない値はその文書をスキップする
'
'
' ================================================================
%END REM
Option Public
Sub Initialize
Dim Sess As New NotesSession
Dim DB As NotesDatabase
Dim DC As NotesDocumentCollection
Dim Doc As NotesDocument
Dim Item As NotesItem
Dim FieldName As String
Dim TmpValue As Variant
Dim GlobalValue As Variant
Dim ItemType As Integer
Dim RemoveCheck As Integer
Dim MulteCheck As Integer
Dim MSG_type As String
Dim MSG_def As String
Dim i As Integer
Dim DocCount As Integer
Dim isNames As Boolean, isReaders As Boolean, isAuthors As Boolean
Dim GlobalIsNames As Boolean, GlobalIsReaders As Boolean, GlobalIsAuthors As Boolean
Set DB = Sess.CurrentDatabase
Set DC = DB.UnprocessedDocuments
DocCount = DC.Count
If DocCount = 0 Then
MsgBox "文書が選択されていません。", 48, "エラー"
Exit Sub
End If
'=== フィールド名入力 ===
FieldName = InputBox("変更するフィールド名を入力してください。", "LotusNotes")
If FieldName = "" Then
MsgBox "処理をキャンセルしました。", 64, "キャンセル"
Exit Sub
End If
'=== 最初の文書 ===
Set Doc = DC.GetNthDocument(1)
Set Item = Doc.GetFirstItem(FieldName)
If Item Is Nothing Then
' フィールドが存在しない場合:型を選択
Dim typeInput As String, typeNum As Integer
typeInput = InputBox( _
"指定フィールド [" & FieldName & "] は存在しません。" & Chr(10) & _
"1=Text,2=Number,3=DateTime,4=Names,5=Readers,6=Authors", _
"フィールド新規作成")
If Trim(typeInput) = "" Then
MsgBox "処理をキャンセルしました。", 64, "キャンセル"
Exit Sub
End If
If Not IsNumeric(typeInput) Then
MsgBox "番号で入力してください。", 48, "入力エラー"
Exit Sub
End If
typeNum = CInt(typeInput)
If typeNum < 1 Or typeNum > 6 Then
MsgBox "1~6 の番号を入力してください。", 48, "範囲エラー"
Exit Sub
End If
Select Case typeNum
Case 1
ItemType = 1280
MSG_type = "[テキスト]"
MSG_def = ""
Case 2
ItemType = 768
MSG_type = "[数値]"
MSG_def = "0"
Case 3
ItemType = 1024
MSG_type = "[日時]"
MSG_def = Format$(Now, "yyyy/mm/dd hh:nn:ss")
Case 4
ItemType = 1280
MSG_type = "[Names]"
isNames = True
Case 5
ItemType = 1280
MSG_type = "[Readers]"
isReaders = True
Case 6
ItemType = 1280
MSG_type = "[Authors]"
isAuthors = True
End Select
Else
' 既存フィールド:型/値を取得
ItemType = Item.Type
isNames = Item.IsNames
isReaders = Item.IsReaders
isAuthors = Item.IsAuthors
Select Case ItemType
Case 1280: MSG_type = "[テキスト]"
Case 768: MSG_type = "[数値]"
Case 1024: MSG_type = "[日時]"
Case Else: MSG_type = "[その他]"
End Select
If IsEmpty(CVar(Item.Text)) Then
MSG_def = ""
ElseIf IsArray(Item.Values) Then
If UBound(Item.Values) = 0 Then
MSG_def = CStr(Item.Values(0))
Else
MSG_def = Join(Item.Values, ",")
End If
Else
MSG_def = Item.Text
End If
End If
'===========================================================
'■ 1件目の値入力
'===========================================================
TmpValue = InputBox("変更する値を入力してください。 " & MSG_type, "LotusNotes", MSG_def)
If TmpValue = "" Then
' 空欄(キャンセル含む) → 削除/空白セット
RemoveCheck = MessageBox( _
"フィールド:" & FieldName & " を削除しますか?" & Chr(10) & _
"[はい]=削除, [いいえ]=空白セット, [キャンセル]=中止", _
35, "確認")
If RemoveCheck = 2 Then Exit Sub ' キャンセル
If RemoveCheck = 7 Then
' 空白セット → 型変換を聞いてよい
Dim cv0 As Variant
cv0 = ConvertDataType("", ItemType, isNames, isReaders, isAuthors)
If cv0 = "__CANCEL__" Then Exit Sub
TmpValue = cv0
Else
' 削除の場合、値は空文字のままでOK(RemoveCheck=6をUpdate側に渡す)
TmpValue = ""
End If
Else
' 値あり → 型変換を確認
Dim cv As Variant
cv = ConvertDataType(TmpValue, ItemType, isNames, isReaders, isAuthors)
If cv = "__CANCEL__" Then Exit Sub
TmpValue = cv
End If
'=== 複数値確認(NamesでもTextでも共通で動く) ===
If Not IsArray(TmpValue) Then
If InStr(TmpValue, ",") > 0 Then
Dim IsMulti As Integer
IsMulti = MessageBox( _
"入力された値にカンマがあります。" & Chr(10) & _
"複数値として扱いますか?", _
35, "複数値確認")
If IsMulti = 2 Then Exit Sub
If IsMulti = 6 Then TmpValue = Split(TmpValue, ",")
End If
End If
'=== 1件目を更新 ===
Call UpdateDocument(Doc, FieldName, ItemType, TmpValue, RemoveCheck, isNames, isReaders, isAuthors)
' 一括適用用に1件目の状態を保持
GlobalValue = TmpValue
GlobalIsNames = isNames
GlobalIsReaders = isReaders
GlobalIsAuthors = isAuthors
Dim GlobalRemoveCheck As Integer
GlobalRemoveCheck = RemoveCheck
'=== 文書が1件だけなら終了 ===
If DocCount = 1 Then
MsgBox "1件の文書を処理しました。", 64, "完了"
Exit Sub
End If
'===========================================================
'■ 2件目以降の処理
'===========================================================
Dim ApplyAll As Integer
ApplyAll = MessageBox( _
"この値を他の文書にも適用しますか?" & Chr(10) & _
"[はい]=残りすべてに適用, [いいえ]=個別入力, [キャンセル]=中止", _
35, "一括変更確認")
If ApplyAll = 2 Then Exit Sub
Dim UseGlobal As Boolean
UseGlobal = (ApplyAll = 6)
For i = 2 To DocCount
Set Doc = DC.GetNthDocument(i)
Set Item = Doc.GetFirstItem(FieldName)
If Item Is Nothing Then GoTo SkipToNext
' 既存フィールドのフラグを取得(個別入力時に使用)
isNames = Item.IsNames
isReaders = Item.IsReaders
isAuthors = Item.IsAuthors
ItemType = Item.Type
If UseGlobal Then
' 一括適用:1件目と同じ型・Names属性を使う
Call UpdateDocument(Doc, FieldName, ItemType, GlobalValue, GlobalRemoveCheck, _
GlobalIsNames, GlobalIsReaders, GlobalIsAuthors)
Else
' 個別入力
If IsEmpty(CVar(Item.Text)) Then
MSG_def = ""
ElseIf IsArray(Item.Values) Then
If UBound(Item.Values) = 0 Then
MSG_def = CStr(Item.Values(0))
Else
MSG_def = Join(Item.Values, ",")
End If
Else
MSG_def = Item.Text
End If
TmpValue = InputBox("文書 " & i & " の新しい値を入力してください。 " & MSG_type, "LotusNotes", MSG_def)
If TmpValue = "" Then
RemoveCheck = MessageBox( _
"フィールド:" & FieldName & " を削除しますか?" & Chr(10) & _
"[はい]=削除, [いいえ]=空白セット, [キャンセル]=中止", _
35, "確認")
If RemoveCheck = 2 Then Exit Sub
If RemoveCheck = 7 Then
Dim cv2 As Variant
cv2 = ConvertDataType("", ItemType, isNames, isReaders, isAuthors)
If cv2 = "__CANCEL__" Then Exit Sub
TmpValue = cv2
Else
TmpValue = ""
End If
Else
Dim cv3 As Variant
cv3 = ConvertDataType(TmpValue, ItemType, isNames, isReaders, isAuthors)
If cv3 = "__CANCEL__" Then Exit Sub
TmpValue = cv3
End If
' 複数値判定(個別入力時)
If Not IsArray(TmpValue) Then
If InStr(TmpValue, ",") > 0 Then
MulteCheck = MessageBox( _
"カンマを含みます。複数値として扱いますか?", _
35, "複数値確認")
If MulteCheck = 2 Then Exit Sub
If MulteCheck = 6 Then TmpValue = Split(TmpValue, ",")
End If
End If
Call UpdateDocument(Doc, FieldName, ItemType, TmpValue, RemoveCheck, isNames, isReaders, isAuthors)
End If
SkipToNext:
Next
MsgBox "すべての文書を処理しました。", 64, "完了"
End Sub
'==============================================================
'■ データ型変換(2行以内ダイアログ & Names/Readers/Authors 選択付き)
'==============================================================
Function ConvertDataType(value As Variant, itemType As Integer, isNames As Boolean, isReaders As Boolean, isAuthors As Boolean) As Variant
Dim ChangeType As Integer
ChangeType = MessageBox("データタイプを変更しますか?", 35, "データタイプ変更確認")
If ChangeType = 2 Then
ConvertDataType = "__CANCEL__"
Exit Function ' キャンセル
End If
If ChangeType = 7 Then
ConvertDataType = value ' 「いいえ」→ そのまま
Exit Function
End If
' ここから実際に型変更するので Names系フラグはいったんクリア
isNames = False
isReaders = False
isAuthors = False
Dim typeInput As String
typeInput = InputBox( _
"変更後タイプ番号:" & Chr(10) & _
"1=Text,2=Number,3=DateTime,4=TextList,5=NumberList,6=Names系", _
"タイプ指定")
If Trim(typeInput) = "" Then
ConvertDataType = "__CANCEL__"
Exit Function
End If
If Not IsNumeric(typeInput) Then
ConvertDataType = "__CANCEL__"
Exit Function
End If
Dim NewType As Integer
NewType = CInt(typeInput)
If NewType < 1 Or NewType > 6 Then
ConvertDataType = "__CANCEL__"
Exit Function
End If
Dim tmp As Variant
Dim i As Integer
Select Case NewType
Case 1 ' Text
tmp = CStr(value)
itemType = 1280
Case 2 ' Number
If Not IsNumeric(value) Then
MsgBox "数値に変換できません。", 48, "変換エラー"
ConvertDataType = "__CANCEL__"
Exit Function
End If
tmp = CDbl(value)
itemType = 768
Case 3 ' DateTime
On Error Resume Next
tmp = CDat(value)
If Err <> 0 Then
Err = 0
MsgBox "日時に変換できません。", 48, "変換エラー"
ConvertDataType = "__CANCEL__"
Exit Function
End If
On Error GoTo 0
itemType = 1024
Case 4 ' Text List
tmp = Split(CStr(value), ",")
itemType = 1280
Case 5 ' Number List
Dim s As Variant, arr() As Double
s = Split(CStr(value), ",")
ReDim arr(LBound(s) To UBound(s))
For i = LBound(s) To UBound(s)
If Not IsNumeric(s(i)) Then
MsgBox "配列内に数値以外があります: " & s(i), 48, "変換エラー"
ConvertDataType = "__CANCEL__"
Exit Function
End If
arr(i) = CDbl(s(i))
Next
tmp = arr
itemType = 768
Case 6 ' Names / Readers / Authors(種類を別途指定)
Dim nrInput As String, nrType As Integer
nrInput = InputBox( _
"Names系の種類を指定してください:" & Chr(10) & _
"1=Names,2=Readers,3=Authors", _
"Names系タイプ指定")
If Trim(nrInput) = "" Then
ConvertDataType = "__CANCEL__"
Exit Function
End If
If Not IsNumeric(nrInput) Then
ConvertDataType = "__CANCEL__"
Exit Function
End If
nrType = CInt(nrInput)
If nrType < 1 Or nrType > 3 Then
ConvertDataType = "__CANCEL__"
Exit Function
End If
Select Case nrType
Case 1: isNames = True
Case 2: isReaders = True
Case 3: isAuthors = True
End Select
' 値そのものはここではまだそのまま(Canonical 化は UpdateDocument で実施)
tmp = value
itemType = 1280
End Select
ConvertDataType = tmp
End Function
'==============================================================
'■ 文書更新(Names/Readers/Authors の Canonical 化+フラグ設定)
'==============================================================
Sub UpdateDocument(doc As NotesDocument, fieldName As String, itemType As Integer, _
value As Variant, removeCheck As Integer, _
isNames As Boolean, isReaders As Boolean, isAuthors As Boolean)
Dim item As NotesItem
Dim i As Integer
Set item = doc.GetFirstItem(fieldName)
'=== 削除 / 空白処理 ===
Select Case removeCheck
Case 6 ' 削除
If Not (item Is Nothing) Then Call item.Remove
GoTo SaveDoc
Case 7 ' 空白セット
Call doc.ReplaceItemValue(fieldName, "")
GoTo SaveDoc
End Select
'=== Names/Readers/Authors の場合は Canonical 化 ===
If isNames Or isReaders Or isAuthors Then
Dim canonicalValue As Variant
Dim nm As NotesName
If IsArray(value) Then
Dim v As Variant
ReDim canonicalValue(LBound(value) To UBound(value))
For i = LBound(value) To UBound(value)
v = value(i)
If Trim(CStr(v)) <> "" Then
Set nm = New NotesName(Trim(CStr(v)))
canonicalValue(i) = nm.Canonical
Else
canonicalValue(i) = ""
End If
Next
Else
If Trim(CStr(value)) <> "" Then
Set nm = New NotesName(Trim(CStr(value)))
canonicalValue = nm.Canonical
Else
canonicalValue = ""
End If
End If
Call doc.ReplaceItemValue(fieldName, canonicalValue)
Set item = doc.GetFirstItem(fieldName)
If Not (item Is Nothing) Then
item.IsNames = isNames
item.IsReaders = isReaders
item.IsAuthors = isAuthors
End If
Else
'=== 通常フィールドの型ごとのセット ===
Select Case itemType
Case 1280 ' Text
Call doc.ReplaceItemValue(fieldName, value)
Case 768 ' Number
If IsArray(value) Then
' すでに配列の場合はそのまま
Call doc.ReplaceItemValue(fieldName, value)
Else
Call doc.ReplaceItemValue(fieldName, CDbl(value))
End If
Case 1024 ' DateTime
Call doc.ReplaceItemValue(fieldName, CDat(value))
Case Else
Call doc.ReplaceItemValue(fieldName, value)
End Select
End If
SaveDoc:
Call doc.ComputeWithForm(True, False)
Call doc.Save(True, True)
End Sub
おわりに
Notes/Domino の管理をしていると、こうした「ちょっとした修正だけど件数が多い」作業は意外と頻繁に発生します。
このエージェントをアプリケーションに入れておけば、フィールド周りのトラブルに素早く対処できるはずです。ソースコードを公開していますので、環境に合わせて自由にカスタマイズしてみてください。
2026年02月12日
こんにちは、開発担当の米原です。
以前にご紹介しました「HCL Designer アプリケーション一覧をスッキリ整理する方法【一括削除&編集】」
の詳細編集方法の詳細版です。
HCL Designer アプリケーション一覧をスッキリ整理する方法【一括削除&編集】
wsInfo.xml をテキストエディタでひらいてみましょう
<?xml version=”1.0″ encoding=”UTF-8″?>
<ws>
<project databasename=”test\test001.nsf” dbtitle=”test001″ fullpath=”test\test001.nsf” projectname=”test001.nsf” replicaid=”49258CE7:439438″/> <project databasename=”test\yone\test001.nsf” dbtitle=”test001″ fullpath=”\\Testsv/Ktrick\test\yone\test001.nsf” projectname=”test001.nsf” replicaid=”49258CE7:439438″ servername=”Testsv/Ktrick”/>
</ws>
各属性名の説明はこうなっております。
<project
databasename=“サーバー内パス”
dbtitle=“タイトル”
fullpath=“\\サーバー名\サーバー内パス”
projectname=“任意の名前.nsf”
replicaid=“16進ID”
servername=“サーバー名/階層” />
ここで注意なのが、DBの保存場所が、サーバーかローカルかで不要な個所があります。
servername こちらはローカルには不要なので記載もしなくても大丈夫です。
〇サーバーDBの場合の違い
| 属性名 | ローカルDBの時 | サーバーDBの時 | 説明 |
|---|---|---|---|
databasename |
test\test001.nsf | test\yone\test001.nsf | Domino 内部で使うパス形式 |
dbtitle |
test001 | test001 | Notes DB のタイトル |
fullpath |
test\test001.nsf | \\Testsv/Ktrick\test\yone\test001.nsf | ローカルは相対/絶対パス、サーバーは UNC 風パス |
projectname |
test001.nsf | test001.nsf | Designer 内部の一時名。重複時に (1) など付く |
replicaid |
49258CE7:439438 | 49258CE7:439438 | DB を一意に識別するレプリカID |
servername |
(なし) | Testsv/Ktrick | サーバーDBの場合のみ追加される |
こちらを参考に編集してみてはどうでしょうか。
それでは本日はこの辺で失礼いたします。
2025年09月16日
こんにちは、米原です。
本日は9月に開催される、Notes/Dominoイベント DominoHub2025 Osaka のご紹介です。
DominoHubと言えば6月に東京で開催されましたが、今年も9月18日(木)に大阪でも開催されます!
今回のテーマは!
Let’s DO MINGLE
「DOMINOでひらく、未来のつながり。」
知るだけじゃない、オフラインだから生まれるつながりが新しい未来を見つけます。
あなたのビジネスを、あなた自身を、加速させる絶好の機会です!
- 日程:2024年9月18日(木)
- テーマ:LET’S DO MINGLE「DOMINOでひらく、未来のつながり。」
- 主催:HCLアンバサダー & 有志メンバー
- 費用:無料(事前登録制)
- 場所:APイノゲート大阪
- 530-0001 大阪府大阪市北区梅田3丁目2−123
APイノゲート大阪 11F・開場:9時30分、13時00分 開始~17時00分 終了(予定)
- 530-0001 大阪府大阪市北区梅田3丁目2−123
- 懇親会:(会場同じ、無料):17時00分開始~19時00分終了(予定)
おすすめポイント!
- HCL Dominoの最新情報が現地で聞ける
- ここだけでしか聞けない、 HCL Notes/Dominoユーザー企業による事例セッション
- ソリューションベンダーによるライトニングトーク!!(皆さんの課題を解決できるDominoソリューションをご紹介)
- 現地開催ですので、色々なNotesユーザや開発者と情報共通ができる
- 2024年10月1日にオープンしたてのAPイノゲート大阪(再開発が進む大阪の街並みを一望できます)
他にも色々なセッションが用意されています!
当日はケートリックメンバーも数人参加予定ですので、現地でお会いすることを楽しみにしております。
2025年09月04日
こんにちは、開発担当の米原です。
HCL Designer を長期間使っていると、アプリケーション一覧がどんどん増えていきます。
最初は気にならなくても、増えていくと起動や一覧表示が遅くなることがあります。
私の場合はテスト用に色々なバージョンのアプリを作成するので、結構増えてしまいがちです。
通常は一覧から右クリックで削除できますが、数が多いとひとつずつ消す作業は非常に手間です。
今回は、一括削除や直接編集で一覧をスッキリ整理する方法を解説します。
備忘もかねてブログに残します。

(↑テスト用に作成したので件数は少ないです)
1. アプリケーション一覧が増えると何が起きる?
-
Designer の起動時間が長くなる(影響大)
-
一覧のスクロールが遅くなる
-
必要なアプリが探しにくくなる(Desingerで整理している人は影響あり?)
これらは、一覧の管理情報が内部ファイルに溜まっていくことで起こっているのではないかと思われます。
定期的な整理で、動作を軽くすることができます。
2. 通常の削除方法(ひとつずつ削除)

-
アプリケーション一覧画面で、削除したいアプリを右クリック
-
「削除」を選択
利点
-
安全・確実で、間違えて消すリスクが低い
欠点
-
100件以上あると、削除作業だけでかなり時間がかかる
3. 一括削除する方法
実は、Designer のアプリケーション一覧は wsInfo.xml という1つのファイルに保存されています。
このファイルを削除すると、一覧が完全にリセットされます。
-
Designer を終了する
-
以下のパスに移動する
Data\workspace\.metadata\.plugins\com.ibm.designer.domino.ide.resources\ -
wsInfo.xmlファイルをバックアップする(任意の場所にコピー) -
元の
wsInfo.xmlを削除 -
Designer を再起動 → アプリケーション一覧が空になる(NotesClientsも開いていたら閉じた方がよさそう)
ポイント
-
削除するとすべての一覧が消えるので、必要なものがある場合は必ずバックアップを取っておきましょう。
4. wsInfo.xml を直接編集する方法
wsInfo.xml は XML形式のシンプルなテキストファイルです。
中身を開くと、登録されているアプリごとに同じようなタグが並んでいます。
編集手順
-
Designer を終了する
-
wsInfo.xmlをテキストエディタ(例:Notepad++)で開く -
不要な
<workspaceItem>のブロックを削除 -
必要なら、新しい
<workspaceItem>を追加することも可能 -
保存して閉じる → Designer を起動して反映を確認
注意点
-
XML のタグ構造を壊すと読み込めなくなる
-
必ずバックアップを取ってから作業する
編集の詳細は別途調べて記事として残す予定です。
まとめ
-
アプリケーション一覧が多いと Designer の動作が遅くなる
-
少数なら右クリック削除、大量なら
wsInfo.xmlの削除が効率的 -
XMLの構造を理解すれば、必要なアプリだけ残すことも可能
定期的に整理することで、快適な開発環境を保つことができます。
一度 wsInfo.xml の扱いに慣れれば、起動スピード改善にも直結します。
私の場合はすぐ一覧が溜まってしまうので、一括削除をおこなっております。
ではでは、今回はこの辺りで失礼いたします。
2025年08月16日
2024年6月にIBMが提供していたNotes/DominoのV9とV10のサポートが終了しました。2025年6月にはNotes/DominoのV11のサポートが終了する予定です。そのため、他製品に移行すべきか検討中の方もいるのではないでしょうか?
Notes/Dominoを取り扱っていないベンダーが脱Notesを推奨しており、Notes/Dominoについて調べないまま他製品に移行した結果、失敗してしまうこともあるため、必ず入念に調べた上でご検討ください。
今回はノーツコンソーシアムの団体に参加している弊社がよく聞く、脱Notesの失敗事例をご紹介します。少しでも危険だと感じたら、Notes/Dominoに詳しいベンダーへのお問い合わせをおすすめします。
脱Notesの失敗事例
Notes/Dominoについて調べないまま他製品に移行した結果、失敗してしまうことがあります。どのような失敗なのかご紹介します。
カスタムアプリケーションが再現できなかった
ある企業は、Notes/Dominoは時代遅れだと噂を聞き、長年使用していたNotes/Domino(旧Lotus Notes)からクラウド型のグループウェアに移行することに決めました。
しかし、独自のワークフローやアプリが多数あり、全ての仕様について把握されていませんでした。その結果、新しいシステムで一部のワークフローやアプリが再現できず業務が滞りました。
特にNotesでのリッチテキストフィールドを利用していたケースなどは移行先でのデータの再現性が著しく落ちることがあります。
このような失敗事例は多いため、独自のワークフローやアプリが多数ある場合は、Notes/Dominoに関して深い知見を持つベンダーへの相談が必要不可欠です。
UI/UXが変更されてユーザー教育が大変になった
ある企業は、プロモーションされているトレンドのグループウェア製品を導入したいと思い、Notes/Domino(旧Lotus Notes)から他社のグループウェアに移行することに決めました。
トレンドのグループウェア製品を導入すれば業務効率化が図れると考えていましたが、現場の社員から「どのように操作すればよいかわからない」「操作が難しい」という声が多く上がり、定着にも時間がかかりました。
データ移行に不備が生じた
ある企業は、Notes/Domino(旧Lotus Notes)から他社のグループウェアに移行することに決めました。
しかし、Notes/Dominoに保存されていたデータのフォーマットが新システムに合わず、重要なデータが欠落し、業務上のトラブルが発生してしまいました。
業務アプリを開発しづらくなった
Notes/Domino(旧Lotus Notes)で業務アプリを開発していましたが、サポート切れを理由に、他社のグループウェアに移行することに決めました。
さまざまな製品がある中でも、ローコード/ノーコードでアプリ開発できるものを選びましたが、Notes/Dominoのように柔軟な開発はできませんでした。
結果として、従業員が「移行前のNotesを使い続けたい」と主張し、一部の部署でシステムの二重運用が発生しました。
コストとスケジュールの見積もりミスが発生した
Notes/Domino(旧Lotus Notes)からクラウド型のグループウェアに移行するプロジェクトは当初、半年以内に完了すると見積もられていました。
しかし、独自のワークフローやアプリの仕様を全て把握しておらず、データ移行の不備が起きて、1年半以上の遅延と予算超過を招きました。
結果的に、移行期間中のライセンス費用や追加開発費用が当初の見積もりを大きく上回ることになり、大きな損失をもたらしました。
失敗事例から学ぶ!脱Notes方法
脱Notes/Dominoのプロジェクトは、多くの企業にとって大きな挑戦です。移行プロセスで起こりがちな失敗を事前に回避し、スムーズな移行を実現するためのコツをご紹介します!
Notes/Dominoの最新情報を収集する
Notes/Dominoは、提供会社がLotus Development社→IBM社→HCL Technologies社に移行しています。
HCL Technologies社に移行した後の情報は、それ以前に比べて多く出回っていませんが、公式ドキュメントやユーザーコミュニティ、専門家によるブログやウェビナーなどを活用することで、情報収集することが可能です。
弊社HPにHCL Technologies社についての記事がありますのでご参考ください。
<参考リンク>HCLテクノロジーズとは?Notes/Domino提供会社の魅力を解説
Notes/Domino 提供会社のHCL Technologies社を調べることで、
- Notes/Dominoの継続利用を検討する
- 他製品に移行する
に関して、より適切な判断ができるようになります。
Notes/Dominoに詳しいベンダーに相談する
次に、Notes/Dominoに詳しいベンダーに相談をしましょう。Notes/Dominoに詳しいベンダーに相談すれば、システム移行する際に、どのような箇所がボトルネックになるか教えてもらえます。
Notes/Dominoに移行すべきか、他製品に移行すべきか、具体的なアドバイスが得られるでしょう。初期段階で巻き込むことで、見積もりやスケジュールの精度が向上し、リスク管理の精度も高まります。
プロジェクトの成功率を向上させる鍵となるため、必ずNotes/Dominoに詳しいベンダーに相談しましょう。
業務プロセスやデータを棚卸ししておく
Notes/Dominoを移行する際は、業務プロセスやデータを棚卸ししておくことが大切です。どの業務プロセスがNotes/Dominoに依存しているのかを特定しておくことが大切です。
データ移行では整合性を確保することが重要です。データクレンジングやフォーマットの統一を事前に行い、移行後に問題が発生しないよう準備を徹底しましょう。このような準備もNotes/Dominoに詳しいベンダーと一緒に行うと安心です。
新しいシステムの教育を徹底する
新しいシステムに移行する場合は、従業員が使いこなせるように教育する必要があります。ハンズオン形式の研修、オンラインチュートリアル、FAQの作成などを準備しておきましょう。
教育内容は業務に即したものにする必要があります。単にシステムの操作方法を説明するだけでなく、新システムによって業務がどのように変わるのか、具体的に示すことで、社員の理解とモチベーションを高めることができます。
脱Notesに関するフェイクニュースに注意!
IBMが提供していたNotes/Dominoのサポートが終了します。そのため、(1)Notes/Dominoの継続利用を検討する(2)他製品に移行することを考えなければなりません。
これをビジネス機会と捉えてNotes/Dominoは時代遅れだと煽る業者が存在しているため注意してください。例えば、次のようなフェイクニュースが流れています。
クラウドやモバイルアプリに非対応で時代遅れだ
→Notes/Dominoはクラウド対応もできますし、モバイルアプリにも対応できます。
IBM社がHCL社に売却してオワコンだ
→HCL社は兆を超える売り上げを誇るインドのIT企業です。
低価格のアプリ開発ツールの方がよい
→申請・承認など業務次第ですが、低価格のアプリ開発ツールは制約を受けやすく複雑なアプリは開発しにくいです。
このような脱Notesに関するフェイクニュースが流れているため、Notes/Dominoに詳しいベンダーに相談してください。
まとめ
Notes/Dominoについて調べないまま他製品に移行した結果、次のような失敗をしてしまうことがあります。
- カスタムアプリケーションが再現できなかった
- データ移行に不備が生じた
- UI/UXが変更されてユーザー教育が大変になった
- 複雑な業務アプリが開発しにくくなった
- コストとスケジュールの見積もりミスが発生した(追加費用が発生)
以上のことから、脱Notesを検討されている場合、まずはNotes/Dominoに詳しいベンダーに相談してから改めて移行について検討してみてください。
2025年05月17日
「Notes/Dominoは時代遅れだから、移行した方がよいよ」「まだNotes/Dominoを利用しているの?」と言われて、他製品への移行を考えていませんか?さまざまなグループウェア製品がある中で、移行先の候補に上がりやすいのがMicrosoft 365です。
しかし、NotesからMicrosoft 365への移行を安易に決断するのはやめましょう。自社にとってベストな選択肢をしてください。
今回はNotesからMicrosoft 365に移行するメリットとデメリットについて解説します。この記事を読めば、Notes/Dominoを継続利用すべきか、Microsoft 365に移行すべきか検討する際に役立つ情報をまとめているため、ぜひ読んでみてください。
Microsoft 365の強み
まず、Microsoft 365の強みを3つご紹介します。
テレワークがしやすい
Microsoft 365には、次のような機能が搭載されています。
- カレンダー
- スケジュール共有機能
- グループチャット
- Web会議
- ファイル共有
Microsoft 365の魅力はチャット機能とWeb会議機能が標準で搭載されていることです。そのため、テレワークを推進したい場合はMicrosoft 365が便利だと感じられるでしょう。
AIを活用して業務効率化を図れる
Microsoft 365ではMicrosoft Copilotが利用できます。Microsoft Copilotに質問をすれば適切な回答が得られ、サポートを頼めば文章作成や画像制作を支援してもらえます。
ワードやエクセル、パワーポイントと連携すれば、大幅に業務効率化が図れるためAIを活用して業務効率化を図りたい場合はMicrosoft 365がおすすめです。
複数人で共同作業ができる
Microsoft 365のアプリを使用すれば、複数人で同時にファイルを編集することができます。ファイルの編集や閲覧の権限も細かく設定できます。
また、PC、タブレット、スマートフォンなど、どのデバイスからもデータへのアクセスが可能です。共同作業ができる状態にしておけば確認作業がしやすくなります。そのため、共同作業が多い場合はMicrosoft 365がおすすめです。
NotesからMicrosoft 365に移行するメリット
以下の機能は現在のNotes単体では実装されていないため、移行時のメリットと言えそうです。
- グループチャット(HCL Sametimeによる実現は可能)
- Web会議(HCL Sametimeによる実現は可能)
- クラウドファイル共有
- Microsoft Copilot
- Office Onlineによる共同編集
NotesからMicrosoft 365に移行するデメリット
次にNotesからMicrosoft 365(旧Office 365)に移行するデメリットを4つご紹介します。
複雑な業務アプリ開発に向かない
Notes/Dominoは、業務アプリ開発を簡単に作成できることが強みです。Microsoft 365にもPower Appsと呼ばれるアプリ開発ツールがあります。
しかし、アプリを開発する上では制限される事も多いです。例えば、JavaScriptなどの外部コードを直接組み込みにくくなっています。JavaScriptを埋め込んで実行する機能はサポートされていないことが公式に明記されているため注意が必要です。
また、Power Appsで多くのアプリを開発すると挙動が悪くなり、使い勝手が遅くなります。また、大量のデータを取り扱うことも苦手としています。つまり、大規模なアプリ開発には向いておらず、複雑な業務アプリを開発して業務効率化を図りたい場合はNotes/Dominoを利用した方がよいでしょう。
データ移行時に制約を受ける
NotesからMicrosoft 365に移行する際にデータ移行の制約を受けてしまうことがあります。必要に応じて、データクレンジングをしてデータ形式を調整しなければなりません。
とくに注意しなければならないのは、申請・承認プロセスや権限設定の移行が難しいことです。
Notesで実現できていたアクセス制御リスト(ACL)での細やかな権限設定を移行先で実現する場合は莫大なコストがかかります。コストがかかるだけでなく、お客様側も業務フローを洗い出さなければならず負担となります。そのため、複雑な申請・承認プロセスや権限を設定している場合は、安易に移行せずNotes/Dominoを利用した方がよいでしょう。
基本的にクラウドでの利用となる
Microsoft 365はクラウド活用が前提となります。自社の要件に合わせて、クローズドなネットワーク環境を構築したい場合などは不向きです。そのため、オンプレミス環境を希望する方はNotes/Dominoを利用した方がよいでしょう。
莫大な初期費用が必要になる
NotesからMicrosoft 365に移行する場合は、莫大な初期費用が必要になります。先ほども説明した通り移行する際には、申請・承認プロセスや権限等の移行で難航します。
申請・承認プロセスを細かく設定している場合、ゼロから構築する工程が長引き、莫大な初期費用がかかるでしょう。
一方で、Notes/Dominoであれば継続利用が可能です。申請・承認プロセスや権限設定を変えずに利用できます。そのため、Notes/Dominoに満足していて費用を抑えたい場合はNotes/Dominoを継続利用した方がよいでしょう。
NotesからMicrosoft 365に移行の向き・不向き
NotesからMicrosoft 365(旧Office 365)に移行するメリット・デメリットを解説しますが、移行の向き・不向きをまとめると次のようになります。どちらを重視したいかで、移行すべきか判断してみてください。
| 向いている | 向いていない |
|
|
NotesからMicrosoft 365に移行する際の注意点
NotesからMicrosoft 365(旧Office 365)に移行する際は、NotesとMicrosoft 365両方に詳しい信頼できるベンダーに相談をしてください。中立的な立場でアドバイスしてくれる相談先を見つけましょう。
2019年にHCL社がIBM社からNotes/Dominoを買収して以来、国内においてNotes/Dominoに関する情報が正しく伝わらないケースがでてきており、次のようなフェイクニュースが飛び交っています。
フェイクニュース
- Notes/Dominoはモバイルアプリで利用できない
- Notes/Dominoはクラウドで利用できない
- HCL社は無名で危険である
このような情報を拡散するのは、Notesから他製品に移行してもらうための営業トークです。騙されてしまうと、莫大な移行費が取られます。
また、移行自体が上手くいかなくなり、その結果、Notesが残り続けるといったトラブルが発生する恐れがあります。このようなトラブルを避けるためにも、HCL社やNotes/Dominoの最新情報に詳しく、Microsoft 365にも精通しているベンダーに相談してください。
まとめ
NotesからMicrosoft 365(旧Office 365)に移行するメリット、デメリットをご紹介しました。どちらがおすすめかは各社で異なります。
移行が向いている場合、向いていない場合があります。そのため、本記事を参考にしながら、移行すべきかどうか判断してみてください。
また、移行する際には、中立的な立場でアドバイスしてくれる信頼できる相談先を見つけてください。弊社でも、移行のアドバイスをしているため、ぜひお気軽にご相談ください。
2025年05月15日









