{
    "componentChunkName": "component---src-templates-blog-post-jsx",
    "path": "/post/learn-makefile/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WEB EGG","author":"Leko - CTO at Yuimedi"}},"markdownRemark":{"id":"03d97139-44e3-5b48-afe3-28cd7d8892c5","excerpt":"こんにちは。れこです。 makeというコマンド自体は何らかをインストールするときとかにたまに触るのですが、 自前でMakefileとやらを作ったことは今まで一度もなかった。 そんな私のはじめては「ISUCON 2016のGoの参考実装で使われていたので、触らざるを得なかった」という出会いでした。笑 「うわっmake…","html":"<p>こんにちは。れこです。<br>\n<code>make</code>というコマンド自体は何らかをインストールするときとかにたまに触るのですが、<br>\n自前でMakefileとやらを作ったことは今まで一度もなかった。</p>\n<p>そんな私のはじめては「ISUCON 2016のGoの参考実装で使われていたので、触らざるを得なかった」という出会いでした。笑</p>\n<p><strong>「うわっmakeコマンド叩くやつだ」</strong> とわけの分からない気構えをしていたのですが、<br>\nいざ触ってみたら学習コストほぼゼロで見やすくて使いやすいというとてもいいツールだったので簡単に紹介と備忘録を。</p>\n<!--more-->\n<h2 id=\"はじめに\" style=\"position:relative;\"><a href=\"#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB\" aria-label=\"はじめに permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>はじめに</h2>\n<p>Makefileが手に馴染んだのは、おそらく他のタスクランナーに触れたことがあるからな気がしています。<br>\n例えば<a href=\"http://gruntjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Grunt</a>や<a href=\"http://gulpjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">gulp</a>はよく使ってます。</p>\n<p>で結論として、gulpのようにストリームをベースにした（jsにロックインした）作りが必要でない限り、Makefileでいいんじゃなかろうかと感じました</p>\n<p>makeには色々な種類があるらしいので、ここでは参考記事に則ってGNU makeに関して記述します。</p>\n<blockquote>\n<p><a href=\"http://www.ie.u-ryukyu.ac.jp/~e085739/c.makefile.tuts.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Makefile の書き方 (C 言語) — WTOPIA v1.0 documentation</a></p>\n</blockquote>\n<h2 id=\"makefileを作ってみる\" style=\"position:relative;\"><a href=\"#makefile%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B\" aria-label=\"makefileを作ってみる permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Makefileを作ってみる</h2>\n<p>今回はGoのビルドをしたいのでおそらくこんな感じになるのかと。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">build: main.go\n    go get -u github.com/kataras/iris/iris\n    go build -v -o app main.go</code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">任意のタスク名: 対象のファイル名\n    先頭をタブでインデントし、実行するコマンドを改行区切りで記述\n\n任意のタスク名2: \n    対象ファイルがなくてもいいらしい？</code></pre></div>\n<p>というとても簡素な書き方。</p>\n<h2 id=\"makeコマンドを叩いてみる\" style=\"position:relative;\"><a href=\"#make%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%8F%A9%E3%81%84%E3%81%A6%E3%81%BF%E3%82%8B\" aria-label=\"makeコマンドを叩いてみる permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>makeコマンドを叩いてみる</h2>\n<p>上記のMakefileだったら<code>make</code>もしくは<code>make build</code>で実行できます。<br>\nmakeはタスク名を渡さなかった場合、ファイルないでもっとも先頭のタスクがデフォルトとして実行されるようです。</p>\n<blockquote>\n<p>デフォルトでは、Makeは一番目のターゲットから開始します。このターゲットのことをデフォルトゴールと呼びます。</p>\n<p>— <a href=\"http://postd.cc/7-things-you-should-know-about-make/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Makeについて知っておくべき7つのこと | インフラ・ミドルウェア | POSTD</a></p>\n</blockquote>\n<h2 id=\"まとめ\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"まとめ permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>まとめ</h2>\n<p><strong>多機能すぎて現状いまいち掴みきれない</strong><br>\n冒頭で学習コストゼロとか言ったのだれですか。最低限ならすぐ触れるけど奥が深すぎますよ。<br>\n調べれば調べるほど色んな機能が出てきて理解が追いつくのはいつの話になるのやら、という感じでした…</p>\n<p>それでも軽く触りの部分だけ触っただけで、温故知新とはこのことかと感じました。<br>\n大袈裟すぎず、ちょうど手に収まるツールと言う感じがしました。<br>\nまだmake歴2日くらいなので、これからつらみやしぶみ、うまみを知って行きたいと思います。</p>\n<hr>\n<p>本件とは全く関係ない蛇足。<br>\nMakefileというファイル名を見ていてふと気になったのですが、<br>\n今回の<code>Makefile</code>、Dockerの<code>Dockerfile</code>、vagrantの<code>Vagrantfile</code>、Herokuの<code>Procfile</code>などの<code>{大文字から始まるツール名}file</code>というファイル名と、<br>\n<code>.bowerrc</code>や<code>.babelrc</code>、<code>.editorconfig</code>などのドットから始まるファイル、なんかの派閥があるんでしょうか？</p>\n<p>傍から見てると うまみうまあじ戦争 みたいだなーなんて思ってます。<br>\nうまみ派はgulpでも使ってればいいと思います</p>","timeToRead":3,"frontmatter":{"title":"Makefile初めて触った。めっちゃ簡単だった","tags":["CLI"],"date":"October 03, 2016","featuredImage":null}}},"pageContext":{"slug":"/learn-makefile/","previous":{"fields":{"slug":"/how-to-connect-database-with-database-uri-without-config/"},"frontmatter":{"title":"Railsでconfig/database.ymlを使わずURL文字列でDB接続したい","tags":["Go","Nodejs","Ruby","Ruby on Rails"]}},"next":{"fields":{"slug":"/benchmark-of-clearstatcache-in-php/"},"frontmatter":{"title":"PHPのclearstatcacheのベンチマークを取ってみた。むしろ遅かった。","tags":["PHP"]}}}},
    "staticQueryHashes": ["2585454260","2954598359"]}