コードブロック
コードブロックを使うと、コードを読みやすく共有できます。
コード書式を挿入する
Zulip の compose box には、状況に応じて適切なコード書式を挿入する
スマートな Code () ボタンがあります。
- テキストが選択されていない場合、このボタンはコードブロック (
```) の書式を挿入します。
- 選択したテキストが 1 行の場合、このボタンはコードスパン (
`) の書式を挿入します。
- 選択したテキストが複数行の場合、このボタンはコードブロック (
```) の書式を挿入します。
- Via compose box button
- Via Markdown
-
作成ボックスを開きます。
-
(optional) 書式を適用したいテキストを選択します。
-
compose box の下部にある Code () アイコンをクリックして、コード書式を挿入します。
-
(optional) コードブロックで構文ハイライトを有効にするには、最初の ``` の直後に希望するプログラミング言語名を入力します。
自動補完候補から言語を選択してください。
選択したテキストから既存のコード書式を削除するために、
Code () アイコンを使うこともできます。
-
作成ボックスを開きます。
-
インラインのコードスパンを作成するには、テキストをシングルバッククォートで囲みます:
コードブロックを作成するには、テキストをトリプルバッククォートで囲みます:
```
def f(x):
return x+1
```
構文ハイライトを有効にするには、トリプルバッククォートの後に 1 文字以上の文字を入力し、
自動補完候補から希望するプログラミング言語を選択します。
```python
def fib(n):
# TODO: base case
return fib(n-1) + fib(n-2)
```
コードブロックの開始には ~~~ を使うこともできますし、
コードを 4 文字以上インデントする方法でも構いません。
例
コードブロックの例
言語タグ
コードブロックに言語タグを付けると、構文ハイライトと
(設定されていれば)code playground が有効になります。
Zulip は数百種類の言語の構文ハイライトに対応しています。
コードブロックの開始フェンス (```) の後に言語名を入力すると、
そのコードブロックにタグを付けられます。以下の例のように入力してください。
言語名の入力は typeahead が補助します。
Pygments lexer documentation にある Short names の値が、
構文ハイライトに対応する完全な一覧です。
``` python
print("Hello world!")
```
デフォルトのコードブロック言語
組織管理者は、コードブロックのデフォルト言語を設定することもできます。
コードブロックにタグがない場合は、その言語が使用されます。
この機能を利用できるのは、組織オーナーと管理者のみです。
- Instructions for all platforms
デフォルト言語が設定されている場合、構文ハイライトなしでコードブロックを表示するには
```text を使えます(たとえばエラーメッセージを貼り付ける場合など)。
Code playground
Code playground は、コードの編集やデバッグをブラウザー内で手軽に行えるよう設計された
対話型の開発環境です。任意のプログラミング言語に対して設定できます。
その言語タグが付いた Zulip のコードブロックには、ホバー時にボタンが表示され、
code playground サイトでそのコードブロックを開けます。
カスタム code playground を追加する
この機能を利用できるのは、組織オーナーと管理者のみです。
- Instructions for all platforms
-
Go to Code playgrounds.
-
Add a new code playground の下で、Language、Name、
URL template を入力します。
-
Add code playground をクリックします。
たとえば Rust 用の code playground を設定する場合は、
言語と URL template に Rust と https://play.rust-lang.org/?code={code} を指定できます。
コードブロックに rust というラベルが付いている場合(明示的に付けた場合も、
組織のデフォルトによる場合も含む)、ユーザーはホバー時に、そのコードブロックを
指定した code playground で開くオプションを利用できます。
Code playground は、リンクの生成方法を記述するために
RFC 6570 準拠の URL template を使います。
Zulip のレンダリングエンジンは、コードブロック内の URL エンコード済みコードを
code パラメーターとして、この URL template 内の {code} に渡して URL を生成します。
URL template については、
カスタム linkifier を追加する の説明も参照できます。
playground URL template の例
以下は、いくつかの人気言語で使える playground URL template の一覧です。
- Java:
https://pythontutor.com/java.html#code={code} または
https://cscircles.cemc.uwaterloo.ca/java_visualize/#code={code}
- JavaScript:
https://pythontutor.com/javascript.html#code={code}
- Python:
https://pythontutor.com/python-compiler.html#code={code}
- C:
https://pythontutor.com/c.html#code={code}
- C++:
https://pythontutor.com/cpp.html#code={code}
- Rust:
https://play.rust-lang.org/?code={code}
技術的な詳細
-
1 つの言語に対して複数の playground を設定できます。その場合、
ユーザーはどの playground でコードを開くか選択できます。
-
Language フィールドには、そのプログラミング言語に対応する
人間向けの Pygments 言語名を指定します。コードブロックの言語タグは内部的に
これらの人間向け Pygments 名にマッピングされます。たとえば py3 や py は
Python にマッピングされます。typeahead(何か入力したとき、または言語フィールドを
クリックしたときに表示されます)を使って Pygments 名を調べられます。
-
Code playground を開くリンクは、常にコードブロックの内容を URL エンコードしたものを
URL template 内の code 変数に代入して生成されます。
URL template には、code という名前の変数がちょうど 1 つ含まれている必要があります。
-
Code playground サイトは URL 形式を明確に文書化していないことがあります。
その場合でも、ブラウザーの URL バーから接頭辞部分を取得できることがよくあります。
-
シンプルな連携を実装するために、カスタム言語名を使うこともできます。
たとえば、send_tweet という「言語」タグが付いたコードブロックを、
その内容を Tweet として送信する「playground」と組み合わせて使うことができます。
Code playground の設定で困った場合は、何を実現したいかの詳細を添えて
お問い合わせください。喜んでお手伝いします。
関連記事