SharePointを使っていると、リストのハイパーリンク列に特定の見た目を持たせたい場面があると思います。特に「代替テキスト(表示名)を表示したい」「テキストを中央寄せまたは左寄せにしたい」「リンクとしての機能はそのまま残したい」といった要望はとても多いです。ぼくも最初にやろうとしたときは、思いどおりに書式が適用されなかったり、文字列が消えてしまったりといろいろ苦労しました。
そこで今回は、SharePointリストのハイパーリンク列にJSON書式を適用し、見た目や配置、リンク機能をコントロールするための手順をまとめます。実際にあったトラブルやその解決策を踏まえて整理しているので、似たような問題でつまずいている人の助けになるはずです。ハイパーリンク列は内部構造が少し特殊なので、事前知識があるとスムーズに設定できると思います。いっしょに確認していきましょう!
SharePointのハイパーリンク列とは
SharePointリストでは「ハイパーリンクまたは画像」列を使うと、URLと表示テキストを別々に設定できます。たとえば「https://example.com」と「こちら」といった形で、URLと代替テキスト(表示名)を指定できるわけです。
ただし、この列にはいくつか独自の扱いがあり、JSON書式設定を使ってリンクを装飾しようとすると「URLしか表示されない」「代替テキストが出ない」「書式自体が無視される」など、想定外の挙動に陥ることがあります。
JSON書式設定とは
JSON書式設定とは、SharePointリストやライブラリの列・ビューの表示を柔軟にカスタマイズできる仕組みです。JSON(JavaScript Object Notation)の記述を使い、HTMLの要素やスタイルをコントロールするイメージです。
- 例:
"elmType": "div"
と書くと<div>
タグとして表示 style
で CSS のプロパティを設定可能children
で入れ子要素を定義できるattributes
でリンク先やその他の属性を指定可能
このJSON書式設定は非常に便利ですが、ハイパーリンク列においては独特の挙動を把握しておかないと、うまく動かないケースが多いです。
JSON書式設定で起こりやすいトラブルとその原因

ハイパーリンク列を扱うときに多いトラブルとして、次のようなものがあります。
- テキストが消える
JSONの書き方次第で、リンクのテキスト部分がまったく表示されなくなる場合があります。 - リンク機能が失われる
見た目は出せても、クリックしても飛ばないただの文字列になってしまうことがあります。 - 代替テキストが取得できない
SharePointのハイパーリンク列には、URL と 表示テキスト がセットになっているはずなのに、JSON書式で[$列名.desc]
や[$列名.displayValue]
を書いても上手く取得できないケースがあります。 - 想定どおりに中央寄せや左寄せにならない
JSONでtext-align: center
を指定しても、リスト全体のスタイルが干渉して、微妙なズレが生じることがあります。
これらの原因としては、SharePointのバージョンやUIの仕様により、ハイパーリンク列が実際には「文字列として URL,表示名
が格納されている」「@currentField
でアクセスできるプロパティが制限されている」など、複数の要因が考えられます。さらに列の内部名の書き方や、列の作成方法によって動作が変わることもあるため、テストを重ねて最適解を探す必要があるのです。
ハイパーリンク列の構造を理解する
ハイパーリンク列は、SharePoint上では以下のような形でデータを保持していることが多いです。
- URL部分:
[$Link]
- 代替テキスト(表示名):多くの場合、
[$Link.desc]
で参照しようとするが取得できないケースがある - 内部的には:
"https://example.com,テストリンク"
のように1つの文字列で管理される場合もある
このように、ユーザーから見ると「URL」と「表示名」が分かれているように見えても、JSON書式設定のコードでそれをどう取り出すかは、列の作り方やバージョンによって異なります。
さまざまなJSONコードの試行錯誤
1. [$Link] と [$Link.desc] を使うパターン
基本的には、次のようなコードが「もっとも素直」な書き方とされています。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "a",
"attributes": {
"href": "[$Link]",
"target": "_blank"
},
"txtContent": "[$Link.desc]"
}
しかし、これがそのまま動くかどうかは、列の設定やバージョンに大きく依存します。動けば問題ありませんが、場合によっては [$Link.desc]
が表示されず、URL本体が出てきたり、何も出なかったりすることがあるのです。
対処法
- 列の内部名が「Link」なのか「Link1」なのか、正確に確かめる
- SharePointのクラシックUIか、モダンUIか、利用しているバージョンを確認する
- リストの列設定を変更した際に、内部名が変わっていないかチェックする
2. @currentField.displayText を使うパターン
公式ドキュメントや一部のコミュニティでは、以下のように @currentField
という特別な参照方法を推奨する場合もあります。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "a",
"attributes": {
"href": "@currentField.url",
"target": "_blank"
},
"txtContent": "@currentField.displayText"
}
@currentField.url
や @currentField.displayText
は、ハイパーリンク列をオブジェクトのように扱う記法です。しかし、これも動作しない環境があるようで、実際に適用してみると何も表示されない・リンクが無効になるといった声がよく聞かれます。
対処法
- 利用しているリストがモダンUI向けの書式設定に対応しているかを確認する
- ハイパーリンク列を作成し直して試してみる
- 別の列タイプと勘違いしていないか確認する
3. split([$Link], ',')[1] で代替テキストを抜き出すパターン

一部のケースでは、ハイパーリンク列の値が "URL,代替テキスト"
という文字列で格納されているため、split()
を使ってカンマ区切りの2番目(配列インデックス1)を取得する方法が使われます。例としては以下のようになります。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "a",
"attributes": {
"href": "[$Link]",
"target": "_blank"
},
"children": [
{
"elmType": "span",
"txtContent": "=split([$Link], ',')[1]"
}
]
}
これは環境によっては成功しますが、場合によっては "=split([$Link], ',')[1]"
という文字列がそのまま出てしまい、式が評価されずに終わることがあります。
また、カンマが含まれないURLや表示テキストを使っていると、正しく分割できない可能性もあるため、安定性がやや低い手段です。
配置や装飾に関するポイント

中央寄せを行いたい場合
一般的に text-align: center;
を指定するか、display: flex; justify-content: center;
を使います。
ただし、SharePointのリストセルには既定でパディングが入っているため、完全に列の見出しと水平位置を揃えようとすると微妙にズレが出ることがあります。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"style": {
"display": "flex",
"justify-content": "center"
},
"children": [
{
"elmType": "a",
"attributes": {
"href": "[$Link]",
"target": "_blank"
},
"style": {
"text-decoration": "underline",
"color": "#0078d4"
},
"txtContent": "[$Link.desc]"
}
]
}
これでテキストが中央寄せされ、リンクとしても機能します。アンダーラインは text-decoration: underline
で指定し、SharePoint標準のリンクカラーに合わせたいなら color: "#0078d4"
を使うと自然な見た目になります。
左寄せで見出しと水平位置を合わせたい場合
列の見出しが左端寄せの場合は、次のようにして余白を微調整すると自然な配置になります。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"style": {
"padding-left": "12px"
},
"children": [
{
"elmType": "a",
"attributes": {
"href": "[$Link]",
"target": "_blank"
},
"style": {
"text-decoration": "underline",
"color": "#0078d4"
},
"txtContent": "[$Link.desc]"
}
]
}
ここでは padding-left: "12px"
で少しだけインデントをつけています。12ピクセルはあくまで例なので、見出しの位置とちょうど良い幅に調整してください。
うまくいかない場合のチェックリスト
- 列の内部名を確認する
SharePointの列は表示名と内部名が異なる場合があります。内部名を間違えると、[$Link]
などの指定が無効になります。列の編集画面URLにField=xxxxx
と書かれている部分が内部名の手がかりです。 - クラシックUIとモダンUIの違い
JSON書式設定はモダンUIに特化しているため、クラシックUIを使っているリストだと想定どおりに動かないケースがあります。 - ハイパーリンク列の実態を調べる
URLと表示名が本当にカンマ区切りで格納されているかどうか、あるいは[$Link.desc]
で取得できるかどうか、実際に試してみる必要があります。- 別のテスト用リストを作って実験すると安全です。
- CSS競合を確認する
SharePoint側のCSSやテーマ設定が強い優先度を持っていて、JSONで指定したスタイルが上書きされる場合があります。うまく効かない場合は!important
を付けるなど、工夫が必要になるかもしれません。 - リンクを開くターゲット先を確認する
"target": "_blank"
を指定すると新しいタブで開きます。これを指定しないと同じタブで移動するため、ユーザー体験が変わるかもしれません。
まとめ:最終的に目指す書式設定の例

いろいろ試行錯誤した結果、以下のJSONがもっとも安定して「代替テキスト(表示名)」を表示しつつ、リンク機能を保持し、見た目をある程度コントロールする例としてよく使われます。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"style": {
"display": "flex",
"justify-content": "center"
},
"children": [
{
"elmType": "a",
"attributes": {
"href": "[$Link]",
"target": "_blank"
},
"style": {
"text-decoration": "underline",
"color": "#0078d4"
},
"txtContent": "[$Link.desc]"
}
]
}
[$Link]
:URL部分(列の内部名が「Link」の場合)[$Link.desc]
:代替テキスト(表示名)display: flex; justify-content: center;
:中央寄せtext-decoration: underline; color: #0078d4;
:リンクらしい見た目に調整
もし中央寄せではなく、列タイトルと同じ左寄せにしたい場合は padding-left
を使ったり、単純に text-align: left;
を使ったりしてください。
これからJSON書式設定を試す人へのアドバイス
- まずは小さなテストリストを作る
いきなり本番リストで試すと混乱しやすいです。テスト用に列を作り、「URL」「表示名」をいくつか入力して、どの記法で正しく動くかチェックするのがおすすめです。 - 表示名が取得できないときは別の手段を考える
どうしても[$Link.desc]
が機能しない場合は、カスタム列を作って表示名をそこに保存してしまう手もあります。そこから値を参照してリンク表示にすることも可能です。 - バージョンアップに注意
SharePoint Onlineの場合、マイクロソフトが仕様を変更していく可能性があります。動作が急に変わることもゼロではありません。常に最新のドキュメントやコミュニティの情報をチェックするのが良いです。 - CSSや装飾は控えめに
SharePointはあくまで社内・チームで使うプラットフォームなので、装飾しすぎるとユーザーが混乱するかもしれません。必要最低限のスタイルに留めるのも大切です。
さらに活用するためのヒント
他の列との組み合わせ
ハイパーリンク列と組み合わせて、日付列や選択列などをまとめてカスタマイズすると、情報が見やすくなることがあります。たとえば選択列の値によってハイパーリンクの色を変えたい場合、JSONで条件分岐を行うことも可能です。
"style": {
"color": "=if([$Status] == '完了', '#0078d4', '#666666')"
}
このように書くと、別の列 [$Status]
が「完了」のときは青色、そうでなければグレー色で表示できます。
アイコンを表示する
SharePointではアイコンフォント(Office UI Fabric Iconsなど)を利用できる場合があります。ハイパーリンクの前にアイコンを置いて、視覚的にわかりやすくすることもできます。"elmType": "span"
などでアイコンのUnicodeを指定してみるのも面白いです。
カスタムリストやライブラリでも有効
SharePointのドキュメントライブラリやカスタムリストなど、ほとんどのモダンUIベースのリストでJSON書式設定は活用できます。ライブラリの場合はファイル名列など、列の種類によって使えるプロパティが変わるので注意が必要です。
さいごに
SharePointのハイパーリンク列をJSON書式設定で思い通りに扱うには、ちょっとしたコツが必要です。リンクのURLと代替テキスト(表示名)の扱い方を理解しておけば、見た目を自由に変更したり、配置を調整したり、リンクとしての機能をしっかり残したりできます。
トラブルシューティングの流れとしては「列の内部名を確認 → いくつかのJSONパターンを試す → バージョンやUIモードの違いを検証する」が大切です。うまくいかないときも焦らず、シンプルなテストから段階的にやっていくと原因を切り分けやすくなります。もし同じような問題に直面したら、ぜひこの記事の内容を参考にしてみてください。
コメント