コードブロック

コードブロックを使うと、コードを読みやすく共有できます。

コード書式を挿入する

Zulip の compose box には、状況に応じて適切なコード書式を挿入する スマートな Code () ボタンがあります。

  • テキストが選択されていない場合、このボタンはコードブロック (```) の書式を挿入します。
  • 選択したテキストが 1 行の場合、このボタンはコードスパン (`) の書式を挿入します。
  • 選択したテキストが複数行の場合、このボタンはコードブロック (```) の書式を挿入します。

  1. 作成ボックスを開きます

  2. (optional) 書式を適用したいテキストを選択します。

  3. compose box の下部にある Code () アイコンをクリックして、コード書式を挿入します。

  4. (optional) コードブロックで構文ハイライトを有効にするには、最初の ``` の直後に希望するプログラミング言語名を入力します。 自動補完候補から言語を選択してください。

選択したテキストから既存のコード書式を削除するために、 Code () アイコンを使うこともできます。

  1. 作成ボックスを開きます

  2. インラインのコードスパンを作成するには、テキストをシングルバッククォートで囲みます:

`text`

コードブロックを作成するには、テキストをトリプルバッククォートで囲みます:

```
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!")
```

デフォルトのコードブロック言語

組織管理者は、コードブロックのデフォルト言語を設定することもできます。 コードブロックにタグがない場合は、その言語が使用されます。

この機能を利用できるのは、組織オーナーと管理者のみです。

  1. Go to Organization settings.

  2. Other settings の下で、Default language for code blocks を編集します。

デフォルト言語が設定されている場合、構文ハイライトなしでコードブロックを表示するには ```text を使えます(たとえばエラーメッセージを貼り付ける場合など)。

Code playground

Code playground は、コードの編集やデバッグをブラウザー内で手軽に行えるよう設計された 対話型の開発環境です。任意のプログラミング言語に対して設定できます。 その言語タグが付いた Zulip のコードブロックには、ホバー時にボタンが表示され、 code playground サイトでそのコードブロックを開けます。

カスタム code playground を追加する

この機能を利用できるのは、組織オーナーと管理者のみです。

  1. Go to Code playgrounds.

  2. Add a new code playground の下で、LanguageNameURL template を入力します。

  3. Add code playground をクリックします。

たとえば Rust 用の code playground を設定する場合は、 言語と URL template に Rusthttps://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 名にマッピングされます。たとえば py3pyPython にマッピングされます。typeahead(何か入力したとき、または言語フィールドを クリックしたときに表示されます)を使って Pygments 名を調べられます。

  • Code playground を開くリンクは、常にコードブロックの内容を URL エンコードしたものを URL template 内の code 変数に代入して生成されます。 URL template には、code という名前の変数がちょうど 1 つ含まれている必要があります。

  • Code playground サイトは URL 形式を明確に文書化していないことがあります。 その場合でも、ブラウザーの URL バーから接頭辞部分を取得できることがよくあります。

  • シンプルな連携を実装するために、カスタム言語名を使うこともできます。 たとえば、send_tweet という「言語」タグが付いたコードブロックを、 その内容を Tweet として送信する「playground」と組み合わせて使うことができます。

Code playground の設定で困った場合は、何を実現したいかの詳細を添えて お問い合わせください。喜んでお手伝いします。

関連記事