デフォルトのシンタックスハイライトがちょいダサだったので、GatsbyJsのブログにかっこいいシンタックスハイライトを追加してみました。
少し調べてみるとPrismJsというプラグインがカッコ良かったので、追加手順を書いていきます。
例によってプラグインを追加していきます。しようするプラグインはいずれも
$ npm install -S prismjs gatsby-remark-prismjs
gatsby-config.js
にgatsby-remark-prismjs
を追加していきます。gatsby-transformer-remark
のサブプラグインで、markdownをHTMLに変換するプラグインです。
plugins: [
{
resolve: 'gatsby-transformer-remark',
options: {
plugins: [
'gatsby-remark-prismjs',
],
},
},
],
次にCSSで見栄えの調整をしていきます。PrismJsではテーマが用意されているので、用意されたCSSを読み込むだけでそれっぽく整えることができます。例えばブログテンプレートのjsに以下のように追加するだけでOKです。
import "prismjs/themes/prism-okaidia.css"
さらにグローバルCSSを追加して自分好みにカスタマイズすることもできます。
pre[class*='language-'] {
background-color: #1c1b1b;
display: block;
margin: 0 0 20px !important ;
padding-right: 1rem;
padding-left: 2rem;
border-radius: 0 4px 4px 4px;
}
code[class*='language-'],
pre[class*='language-'] {
color: #fff;
}
:not(pre)>code[class*='language-text'] {
padding: 2px 10px 3px 12px;
margin: 0 ;
color : #f14668 !important ;
text-shadow: none !important ;
background-color: whitesmoke !important ;
}
.gatsby-highlight-code-line {
background: #545454;
display: block
}
実際にmarkdownファイルに記述するときは、以下のようにコードをバッククォート3つで囲えばOKです。※下記は/でエスケープしています。
```js
const hoge = 1;
console.log(hoge);
```/
gatsby-remark-code-titles
をgatsby-remark-prismjs
と同様に追加していきます。gatsby-remark-prismjsより前に読み込まれるようにしましょう。
plugins: [
{
resolve: 'gatsby-transformer-remark',
options: {
plugins: [
'gatsby-remark-prismjs-title',
'gatsby-remark-prismjs',
],
},
},
],
markdownファイルに記述するときはtitle=タイトル名
とするだけでタイトルが表示されます。※下記は/でエスケープしています。
```js:title=hoge.js
const hoge = 1;
console.log(hoge);
```/
デフォルトでgatsby-code-titleというclass名が付与されるので、以下のように自分でタイトルをカスタマイズできます。お好きなスタイルを当ててあげてください。
.gatsby-code-title {
background: #50c8a7;
color: #eee;
padding: 6px 12px;
font-size: 0.8em;
line-height: 1;
font-weight: bold;
display: table;
border-radius: 4px 4px 0 0;
}
プラグインを使うだけで簡単にコードブロックの装飾ができました。他にもオプションで色々指定できるので以下を参照してみてください。