Doccoは、CoffeeScriptにコメントをつけてドキュメントを出力できるパッケージです。コードとコメントを左右に表示されるスタイルです。コメントにはMarkdownが使えます。
インストール
インストールはnpm。追加でPygmentsが必要です。
$ npm install -g docco $ sudo easy_install Pygments
使い方
先日のエントリーで紹介したブログアプリCoffee-Boxを例にコメントを書くとこうなります。
(CoffeeBoxの紹介は 『Node.js「脱」初心者!CoffeeBoxでブログの作り方を学ぼう!』を参照してください)
# ***server.coffee*** は、Coffee-Boxのエントリーポイントです。
# [express](http://expressjs.com/)を読み込みます。
express = require 'express'
# Webサーバを生成します。
app = module.exports = express.createServer()
# config/configを読み込みます。
require('./config/config') app
# config/routesを読み込みます。
require('./config/routes') app
# Webサーバを起動します。
app.listen 3000
# サーバが起動したことを出力します。
console.log "coffee-box server listening on port #{app.address().port} " +
"in #{app.settings.env} mode"
ドキュメントを出力してみます。docsディレクトリが必要なので作成します。
$ mkdir docs $ docco server.coffee docco: server.coffee -> docs/server.html
左側にコメントに書いた内容が、右側にコードが表示されます。比較しながら読める点が新鮮です。
少し本格的にCoffeeBoxのconfig/config.coffeeにコメントを書いていきます。
# **config.coffee**では、[Coffee-Box](https://github.com/qiao/coffee-box)のWebサーバを設定します。
# [express](http://expressjs.com/)を読み込みます。
express = require 'express'
# [connect-assets](https://github.com/TrevorBurnham/connect-assets)を読み込みます。
assets = require 'connect-assets'
# [mongoose](https://github.com/LearnBoost/mongoose)を読み込みます。
mongoose = require 'mongoose'
# lib/require_dirを読み込んで、オブジェクトとして保持します。
{requireDir} = require '../lib/require_dir'
# ```ROOT_DIR```を読み込みます。
# ```#{hoge}```は、CoffeeScriptの String Interpolation(文字列挿入)です。
# ```__dirname```は、Nodeが起動したディレクトリパスを示す定数です。
ROOT_DIR = "#{__dirname}/.."
# Webサーバを設定します。
#
# 第1引数にexpressのWebサーバappを指定します。
module.exports = (app) ->
app.configure ->
# アプリケーションのversionを設定します。versionの情報は、[package.json](../package.json)に記述します。
app.set 'version', require("#{ROOT_DIR}/package.json").version
# [site.json](../config/site.json)に記述されたkeyとvalueをすべて設定します。
# CoffeeSciprtの for ... of 構文です。
# 例えば sitename というkeyに、**Name of your site**というvalueがappに設定されます。
app.set k, v for k, v of require("#{ROOT_DIR}/config/site.json")
# libディレクトリをutilsとして設定します。
app.set 'utils', requireDir("#{ROOT_DIR}/lib")
# app/helpersディレクトリをhelpersとして設定します。
app.set 'helpers', requireDir("#{ROOT_DIR}/app/helpers")
# app/modelsディレクトリをmodelsとして設定します。
app.set 'models', requireDir("#{ROOT_DIR}/app/models")
# app/controllersディレクトリをcontrollersGetterとして設定します。
app.set 'controllersGetter', requireDir("#{ROOT_DIR}/app/controllers")
# expressのviewsディレクトリをapp/viewsに設定します。
app.set 'views', "#{ROOT_DIR}/app/views"
# テンプレートエンジンを[jade](http://jade-lang.com/)に設定します。
app.set 'view engine', 'jade'
# ビューのオプションとして、layoutを設定します。
app.set 'view options', layout: "#{ROOT_DIR}/app/views/layouts/layout"
# expressのloggerを使います。
# **loggerはミドルウェアで一番最初に設定すること**
app.use express.logger('dev')
# リクエストの```req.body```を読み込めるように設定します。
app.use express.bodyParser()
# HTTPのPUTやDELETEなどのメソッドをオーバライドできるように設定します。
# **この設定はbodyParserの前にすること**
app.use express.methodOverride()
# cookieを使えるようにします。
app.use express.cookieParser()
# sessionを設定します。
# secretキーに```settings.secretKey```を設定します。
app.use express.session(secret: app.settings.secretKey)
# [connect-assets](https://github.com/TrevorBurnham/connect-assets)を使います。
app.use assets(src: 'app/assets', build: true, detectChanges: false, buildDir: false)
# staticディレクトリをpublicに設定します。
# このディレクトリにはJavascript, CSS, HTMLなどの静的ファイルを格納します。
app.use express.static("#{ROOT_DIR}/public")
# routerを設定します。
# app.routerは、[server.coffee](server.html)で設定されています。
app.use app.router
# helpersを設定します。
# helpersはさっき設定しました。
app.helpers app.settings.helpers
# [express-messages](https://github.com/visionmedia/express-messages) をダイナミックヘルパに設定します。
app.dynamicHelpers messages: require('express-messages')
# session をダイナミックヘルパに設定します。
app.dynamicHelpers session: (req, res) -> req.session
# 開発用の設定を指定します。
app.configure 'development', ->
app.use express.errorHandler(dumpException: true, showStack: true)
# 製品用の設定を指定します。
app.configure 'production', ->
app.use express.errorHandler()
# MongoDbに接続します。
# 接続先は```app.settings.dbpath```です。
# errが発生した場合、コンソールにエラー出力し、Coffee-Boxを終了します。
mongoose.connect app.settings.dbpath, (err) ->
if err
console.error err
process.exit()
これを出力した結果が以下の画像です。
Doccoはコードリーディングに最適
Doccoは、左右にドキュメントとコードを並べるスタイルが最大の特徴です。「何をしているかをコードと比較できる」点でコードを理解しやすいと感じます。リーディングしながらコメントを書いていき出力を繰り返すと、「どこまで自分が理解しているか」という進捗にもDoccoが使えます。また、Markdown形式でリンクや強調などの表現もできるので「着目している点や参考にしたリンク」も加筆できます。キレイなドキュメントで出力されるのでモチベーションも保てそうです。お試しあれ。


0 件のコメント:
コメントを投稿