SlideShare a Scribd company logo
1 of 54
オブジェクト指向とは
まったく違うClojureの世界と
実際のWeb開発
2018年6月 矢野勉
だれ?
名前: 矢野勉 twitter: t_yano github: tyano
会社とか:
代表取締役社長
SPEEDA Japan Company
プロダクト開発チーム社員
↑実はいま京都で学生バイト(プログラマ)orプロの開発者募集してます
興味あればどうぞ。
だれ?
開発関係とか:
以前は: Javaメインでやってました。
最近は: 主にClojureメインでやってます
業務もClojureのタスクが中心です。
Clojureのオープンソースのプロジェクトにパッチを送ったり、
Clojure本体の方でもバグ修正のチケット送ったりしてます。
ブログ
http://boxofpapers.hatenablog.com
Clojureって聞いたことないな?
・LISP系のプログラミング言語
・実用寄り!
・Common LISPとかeLispは手続き寄りの言語だけど、Clo
・ホスト言語に乗っかった実装(JVM)
・データは原則としてすべて不変
・コレクションはだいたい遅延シーケンス
https://clojure.org
不変データをmapとかfilterで加工し
ていくことでプログラムを作る
Data Data Datamap filter
JVM言語?
JVMはホスト言語の一つ
ほかにも、Javascriptをホスト言語にしたClojureとか
、.NET CLRをホストにしたClojureがある
JVM版に機能が追加されると、ほかのClojureにもち
ゃんと機能追加される
https://clojurescript.orgClojureScript
ClojureCLR https://github.com/clojure/clojure-clr
特徴
まあ、カッコは目立ちますよね…
でも、他の言語と比べてカッコが多いわけじゃないんです!
シンプルな言語仕様
[ ] ベクタ。配列。
{ } マップ。連想配列
( ) 関数呼び出し or 連結リスト
#{ } セット
シンプルな言語仕様
(my-great-fn arg1 arg2)
特に注釈がなければ、かっこ ( ) はすべて関数呼び出しです
my-great-fn(arg1 arg2)
よくあるこれと同じです。
データと関数は
はっきり別れている
データにメソッドが生えているわけではない
データは常に単なるデータであり、それを処理する関数は
何個あってもいいし、
どこにあってもいいし、
誰でも定義できる
“It is better to have 100 functions
operate on one data structure than to
have 10 functions operate on 10 data
structures”
10種類のデータ構造にそれぞれを扱う
10個の関数があるよりも、ひとつのデー
タ構造を扱う100個の関数がある方が良
い
共通のデータ構造
Seq
Associative
いわゆる「リスト」のようなもの。「先頭」と「残り」で繋がっているなにか。
いわゆる「マップ」「連想配列」のようなもの。キーと値で構成されたもの
多くの関数はこのいずれかを引数に受け取り、
このいずれかを返します
First Rest
RDBの結果セット
多くの言語ではResultとかResultSetとかなんらかのクラスが定義されてますが
ClojureではただのMapです。
結果セット特有の処理は別途関数として用意すればいいだけなので、
メソッドを生やすためだけにデータ型を定義する必要はないです
ただのMapなので、多くのClojure関数がそのまま適用できます。
静的型付けではない
ものを定義できるけど、関数はそれらをSeqかAssociativeとして
ードで示すために、型ではなく述語を使ったClojure Specとい
データは不変
データは不変だから、プログラム(関数)のやるこ
とは、何か不変データを受け取って、それを変換し
て返すこと。
ひたすらそれだけ。
ウェブAPIは関数
比喩ではなく
ClojureでのWeb API開発では、APIハンドラとは、「
リクエスト」というデータを受け取って
「レスポンス」というデータを返す単なる関数として
実装します。
だからテストを書くのも簡単。
だって本当にただの関数だから、サーバも必要ない。
REPL Driven Development
ただの関数だから、ソースをREPLにロードするだけでいつでも実行できる!
関数は引数にしか依存しない
コンテナなどの起動が必要ない
なんでもREPLに転送してすぐ実行確認しちゃうから
テストを書くのが億劫になる問題が…
Web API仕様
Ring
https://github.com/ring-clojure/ring
PythonのWSGI、RubyのRackのような、HTTPリクエストを処理する仕様
Javaで言えばServlet仕様のようなもの?
Ring仕様
HTTPサーバ (Jetty/http-kit/Alephなどなど)
リクエスト・ルーター
(Compojure/Ataraxy/Bidiなど)
あなたの書いたリクエスト処理関数
Ring
Middleware
Ring仕様の上にライブラリが
作られている
Ringの定めていること
• 大雑把にまとめると、リクエストを処理する「ハンドラ
」関数の引数(リクエスト)と戻り値(レスポンス)の
仕様
• リクエストとレスポンスはただのマップであり、どうい
うキーを持っているべきかを定めている
• cookieもheaderもパラメータも、sessionすらも、リクエ
ストマップのキーに過ぎない
Ring Middleware
リクエストマップを受け取って、マップを書き換え
て次のハンドラを呼ぶようなただの関数
HandlerMiddlewareMiddlewareMiddleware
Request Map
だいたい以下のようなキーが付いているただのマップ
ただし、自由にキーを追加できるので、これだけとは限らない
:server-port
:server-name
:remote-addr
:uri
:query-string
:scheme
:request-method
:protocol
:ssl-client-cert
:headers
:body
:session
:cookies
REPL Demo
みんなREPLでコードをガンガン動かしながらプログラムを作っていくので、
REPL開発を支援するIDE機能や
ライブラリが発展しています
名前空間にJack Inしたり
変更済みファイルをREPL内で再ロードしたり
システム全体をREPLから再起動したり
書いている関数ブロックを丸ごとREPLに転送したり
いま人気があるのは
Micro Framework
Duct
定義に従ってシステムを依存関係に
合わせて構築したり、ぜんぶ停止したり、一部を変更して再構築したりする
機能を備えています
SpringのAutowire、DIみたいな依存性解決だけを抜き出した感じ
https://github.com/duct-framework/duct
次は。
遅延シーケンス
Lazy Sequence
Clojureのリスト処理関数の大半
は、遅延シーケンスを作ります
map
filter
repeat
reduce
constantly
無限シーケンスが簡単にできる
(iterate inc 0)
0から始めて、1ずつ上がっていく数値の無限シーケンス
遅延シーケンスは、要素を取得す
ることでその部分が実体化する
(take 5 (iterate inc 0))
;; => (0 1 2 3 4)
(実際には効率化のために30個程度まとめて実体化されるケースもあります)
1ずつ上がる数値列の先頭5つを取り出す
例えば:
(->> (iterate inc 0)
(map (fn [v] (println "val = " (* v 2)) v)))
無限の数列だけど、map関数に副作用が入っている(コンソールに値を出力する)
take関数などで値を取り出さない限り、コンソールには何も出力されません
これを利用すれば
すべては遅延実行されるので
RDBへちょっとずつクエリを投げて、最終的に全部
を取るような遅延シーケンス
外部APIからoffset/limitを使って適時データを取って
くる遅延シーケンス
このように、いろんなものを「遅延シーケンス」という抽象として扱えます。
遅延シーケンスはSeqなので、
共通データ構造Seqを扱えるどの関数でも使えます。
ぜんぶこの構造に乗せられる
seq seq seqmap filter
Clojureでは遅延シーケン
スを使いこなすのが肝です
。
プログラムとは、あるデータからリ
スト(seq)を作ってmapしたりfilterし
たりreduceしたりするもの
Clojureでは
つまりは
全体がデータ変換関数という
だと捉えることができます
ウェブアプリケーションは
リクエストマップを受け取って、
レスポンスマップに変換する
データ変換関数
関数
リクエスト
レスポンス
Simple
なんでもSeqかAssociative
リクエストをレスポンスに変換する関数を書くだけ
REPLでガンガン試す
シンプル過ぎて迷うことがあんまりないのです。
ウェブアプリ用技術
Compojure リクエストルーター
http-kit Clojure製HTTPサーバ
Duct
アプリケーションのリソース依存関係定義・構築フレームワー
ク
Buddy
セキュリティ・ライブラリ
パスワード暗号化関数や、認証認可のためのRing Middlewareなどの集まり
Cheshire JSONパーサ
clj-http httpクライアント
clojure.java.jdbc RDB接続
IDE
現状、
Emacs + CIDER
が一番人気です。
すでにEmacsに慣れている人はこれでいいと思う。
Emacs苦手な人!ほかにもあります。
• Emacs用のライブラリ
• REPL Driven支援が豊富
• CIDER Jackinで、開発プロジェクトに潜り込む形でREPLを起動できる
• リファクタ機能あり
• ソースの定義元へのジャンプとか。
the Clojure(Script) Interactive Development Environment that Rocks!
Spacemacs + Clojure
Layer
Vimmerは
Clojure layer入れると、CIDERも使えます。
vimの皮を被ったEmacs
IDEをくれ!
IntelliJ IDEA + Cursive
CursiveはIDEA Plugin。商用開発利用は有料です。
(仕事で使うものなんだから金を払おう!)
CIDERではないけど、REPL制御もできるし、当然リファクタやソースジャンプ
なども、IDEAの操作でできます。
この3つのどれかを選
ぶのがいいと思います
どのIDEかよりも
大事なこと
Structural Editing
文字ではなく構造を編集する
Clojure(LISP)プログラマは括
弧を道具として使います
Clojureのコードには、シンプルな構造がある
(defn calc-age
[birthday]
(let [today (now)
diff (:year (difference birthday today))]
diff))
つまり、括弧です。
構造を編集する
Slurp(吸い込む)
(if has-item?) (do-something arg1 arg2)
;=> (if has-item?
(do-something arg1 arg2))
Barf(追い出す)
(let [birthday user-name]) ;=> (let [birthday] user-name)
(if has-item?
(do-something arg1 arg2))
Delete
(if has-item?)→
Structural Editing自体は他の言語でもできるそうですが、
コード自体がリスト構造になっているClojureでは、これの活用で
すごく効率が上がります
前述の3つの開発環境では、どれでもこの機能が使えるので、
ぜひ覚えてください
(IDEごとに操作方法は異なります)
Clojureの特徴まとめ
• シンプルな言語仕様
• (ほぼ)すべてが不変
• 共通データ構造に対してプログラムを書く
• データと関数が分離することでいろいろシンプルになる
• 遅延シーケンスでなんでもシーケンス化
• REPL Driven Programming
• 非同期安全
本当は今日話したかったけど
時間の関係で話せなかったこと
拡張可能な言語Clojure
マクロやdeftypeによって、新しい構文を作れる
実は非同期もすごいんです
core.asyncを使えば、go-routine/軽量プロセスもいけるんです。
Q&A

More Related Content

What's hot

Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったことRecruit Technologies
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務Yutaka Kachi
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則20160526 依存関係逆転の原則
20160526 依存関係逆転の原則bonjin6770 Kurosawa
 

What's hot (20)

Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
 

Similar to Clojureの世界と実際のWeb開発

プログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみたプログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみたHirokiIwanaga
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!Masahiko Sato
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築You&I
 
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソードShohei Okada
 
「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮) 「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮) Taku Yajima
 
Trelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatuTrelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatuYoh Nakamura
 
アウトプットのすすめ
アウトプットのすすめアウトプットのすすめ
アウトプットのすすめKoichiHirai1
 
Bottle使ってPython学習一緒にはじめませんか?
Bottle使ってPython学習一緒にはじめませんか?Bottle使ってPython学習一緒にはじめませんか?
Bottle使ってPython学習一緒にはじめませんか?Tatsuya Shinozuka
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryNobuhiro Sue
 
俺とコミュニティ活動のタスク
俺とコミュニティ活動のタスク俺とコミュニティ活動のタスク
俺とコミュニティ活動のタスクMasayuki KaToH
 
勉強会の活動内容、目的について
勉強会の活動内容、目的について勉強会の活動内容、目的について
勉強会の活動内容、目的についてChihiro Naganuma
 
Jag神戸3(共有用)
Jag神戸3(共有用)Jag神戸3(共有用)
Jag神戸3(共有用)takagig
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBasekyon mm
 
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由Kohei Taniguchi
 
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」tokyorgirls
 
FirebaseでN高生証明botを作ってみた
FirebaseでN高生証明botを作ってみたFirebaseでN高生証明botを作ってみた
FirebaseでN高生証明botを作ってみたYoshimura Soichiro
 
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたことKohki Nakashima
 
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programingKei IWASAKI
 

Similar to Clojureの世界と実際のWeb開発 (20)

プログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみたプログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみた
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード
 
「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮) 「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮)
 
Trelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatuTrelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatu
 
アウトプットのすすめ
アウトプットのすすめアウトプットのすすめ
アウトプットのすすめ
 
Bottle使ってPython学習一緒にはじめませんか?
Bottle使ってPython学習一緒にはじめませんか?Bottle使ってPython学習一緒にはじめませんか?
Bottle使ってPython学習一緒にはじめませんか?
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
 
俺とコミュニティ活動のタスク
俺とコミュニティ活動のタスク俺とコミュニティ活動のタスク
俺とコミュニティ活動のタスク
 
勉強会の活動内容、目的について
勉強会の活動内容、目的について勉強会の活動内容、目的について
勉強会の活動内容、目的について
 
Jag神戸3(共有用)
Jag神戸3(共有用)Jag神戸3(共有用)
Jag神戸3(共有用)
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
 
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
 
LIGでのDocker活用
LIGでのDocker活用LIGでのDocker活用
LIGでのDocker活用
 
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
 
FirebaseでN高生証明botを作ってみた
FirebaseでN高生証明botを作ってみたFirebaseでN高生証明botを作ってみた
FirebaseでN高生証明botを作ってみた
 
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
 
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
 

Clojureの世界と実際のWeb開発