Markdownで表の記載をするときにイラッとした経験のある人集まれ

  • 95
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

QiitaなどのMarkdown記法において、表の記載が出来るのですが途中で改行とか解んなくなって、イラッとして投稿を諦めたことはありませんか?
僕はあります。

サンプルは
Markdown: Qiita
から取得

| Left align | Right align | Center align |
|:-----------|------------:|:------------:|
| This | This | This |
| column | column | column |
| will | will | will |
| be | be | be |
| left | right | center |
| aligned | aligned | aligned |

Left align Right align Center align
This This This
column column column
will will will
be be be
left right center
aligned aligned aligned

前提条件

ローカルにPHP実行環境があること
UTF8でのファイル操作ができること

どうする

Excelで作った表をMarkdownに変換しちゃいましょう。

まず、以下のスクリプトを適当にサクッと書いて保存しておきます。

tsvToMarkdown.php
<?php
if(count($argv) !== 2){
    echoUsage();
}
$tsv_file = $argv[1];
$row = 1;
if (($handle = fopen($tsv_file, "r")) === FALSE) {
    echoUsage($tsv_file." is not a readable file.");
}
while (($data = fgetcsv($handle, 1000, "\t","\"")) !== FALSE) {
    echo str_replace(array("\r","\n"), "", nl2br("| ".implode($data, " | ")." |"))."\n";
    if($row == 1){
        echo "|".implode(array_fill(0, count($data), ":---------") , "|")."|\n";
    }
    $row++;
}
fclose($handle);

function echoUsage($msg = null){
    echo "Usage: ./tsvToMarkdown.php [target_tsv_file]\n";
    echo "TSV ファイルはUTF8で記載してください。\n";
    echo $msg;
    exit(1);
}

Excelで適当に表を書き、Markdown化したい範囲をクリップボードにコピーします。

エクセル表サンプル.jpg

コピーした内容をテキストエディタに貼り付けてUTF-8で保存します。

table_sample.tsv
        概要(聞かれてその意味を自分の言葉で答えることができること)  営業職   エンジニア職
クロスサイト・スクリプティング(XSS)  最低限の知識  簡単に概要を説明できる   ○ ○
    踏み込んだ知識   サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる △ ○
    対策を実行出来る    "一般的な対策方法を実装出来る
ダメな対策例を説明できる"       ○
SQL インジェクション    最低限の知識  簡単に概要を説明できる   ○ ○
    踏み込んだ知識   サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる △ ○
    対策を実行出来る    "一般的な対策方法を実装出来る
ダメな対策例を説明できる"       ○
OSコマンドインジェクション  最低限の知識  簡単に概要を説明できる   ○ ○
    踏み込んだ知識   サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる △ ○
    対策を実行出来る    "一般的な対策方法を実装出来る
ダメな対策例を説明できる"       ○
クロスサイト・リクエストフォージェリ(CSRF)    最低限の知識  簡単に概要を説明できる   ○ ○
    踏み込んだ知識   サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる △ ○
    対策を実行出来る    "一般的な対策方法を実装出来る
ダメな対策例を説明できる"       ○
Session Fixation(セッションIDの固定化)   最低限の知識  簡単に概要を説明できる   ○ ○
    踏み込んだ知識   サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる △ ○
    対策を実行出来る    "一般的な対策方法を実装出来る
ダメな対策例を説明できる"       ○
HeaderInjection攻撃   最低限の知識  簡単に概要を説明できる   ○ ○
    踏み込んだ知識   サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる △ ○
    対策を実行出来る    "一般的な対策方法を実装出来る
ダメな対策例を説明できる"       ○

これで、タブ区切り、ダブルクオーテーションでクオートされたファイルが作成されます。

最初に作った変換スクリプトを走らせます。

php ./tsvToMarkdown.php table_sample.tsv > result.txt

result.txt
|  |  | 概要(聞かれてその意味を自分の言葉で答えることができること) | 営業職 | エンジニア職 |
|:---------|:---------|:---------|:---------|:---------|
| クロスサイト・スクリプティング(XSS) | 最低限の知識 | 簡単に概要を説明できる | ○ | ○ |
|  | 踏み込んだ知識 | サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる | △ | ○ |
|  | 対策を実行出来る | 一般的な対策方法を実装出来る<br />ダメな対策例を説明できる |  | ○ |
| SQL インジェクション | 最低限の知識 | 簡単に概要を説明できる | ○ | ○ |
|  | 踏み込んだ知識 | サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる | △ | ○ |
|  | 対策を実行出来る | 一般的な対策方法を実装出来る<br />ダメな対策例を説明できる |  | ○ |
| OSコマンドインジェクション | 最低限の知識 | 簡単に概要を説明できる | ○ | ○ |
|  | 踏み込んだ知識 | サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる | △ | ○ |
|  | 対策を実行出来る | 一般的な対策方法を実装出来る<br />ダメな対策例を説明できる |  | ○ |
| クロスサイト・リクエストフォージェリ(CSRF) | 最低限の知識 | 簡単に概要を説明できる | ○ | ○ |
|  | 踏み込んだ知識 | サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる | △ | ○ |
|  | 対策を実行出来る | 一般的な対策方法を実装出来る<br />ダメな対策例を説明できる |  | ○ |
| Session Fixation(セッションIDの固定化) | 最低限の知識 | 簡単に概要を説明できる | ○ | ○ |
|  | 踏み込んだ知識 | サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる | △ | ○ |
|  | 対策を実行出来る | 一般的な対策方法を実装出来る<br />ダメな対策例を説明できる |  | ○ |
| HeaderInjection攻撃 | 最低限の知識 | 簡単に概要を説明できる | ○ | ○ |
|  | 踏み込んだ知識 | サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる | △ | ○ |
|  | 対策を実行出来る | 一般的な対策方法を実装出来る<br />ダメな対策例を説明できる |  | ○ |
概要(聞かれてその意味を自分の言葉で答えることができること) 営業職 エンジニア職
クロスサイト・スクリプティング(XSS) 最低限の知識 簡単に概要を説明できる
踏み込んだ知識 サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる
対策を実行出来る 一般的な対策方法を実装出来る
ダメな対策例を説明できる
SQL インジェクション 最低限の知識 簡単に概要を説明できる
踏み込んだ知識 サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる
対策を実行出来る 一般的な対策方法を実装出来る
ダメな対策例を説明できる
OSコマンドインジェクション 最低限の知識 簡単に概要を説明できる
踏み込んだ知識 サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる
対策を実行出来る 一般的な対策方法を実装出来る
ダメな対策例を説明できる
クロスサイト・リクエストフォージェリ(CSRF) 最低限の知識 簡単に概要を説明できる
踏み込んだ知識 サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる
対策を実行出来る 一般的な対策方法を実装出来る
ダメな対策例を説明できる
Session Fixation(セッションIDの固定化) 最低限の知識 簡単に概要を説明できる
踏み込んだ知識 サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる
対策を実行出来る 一般的な対策方法を実装出来る
ダメな対策例を説明できる
HeaderInjection攻撃 最低限の知識 簡単に概要を説明できる
踏み込んだ知識 サービスの内容ごとに攻撃の頻度、難易度、影響度を説明できる
対策を実行出来る 一般的な対策方法を実装出来る
ダメな対策例を説明できる

最後に

現在、全て左詰めにしていますので、生成された文字列の二行目を適当に変更して使ってください。

この方法を使うと、Qiita投稿の下書きを一旦Excelで行ってから表を適当に流し込んだりすることが楽になりますのでお試しください。

てか、Webサービス化したら便利な気がしてきた、、、、。