SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
NATIVE EXTENSION
のビルド
どうしてますか?
(改訂版)
kawasaki.rb #37 @ 20160623
ぺけみさお
発表者紹介
ぺけみさお
プログラマ
http://www.xmisao.com/
一言で言うと
辛い
具体的な辛み
OSやディストリビューションによってビルドに必要な
パッケージが異なる。
最近は、Dockerなどで、Alpine Linux(以下Alpine)など
の使い慣れないOSを使用する機会もある。
nokogiriはとても良いライブラリだけれ
ど、nokogiriのビルドで、いったい何人の初心者
Rubyistが心を挫かれたことだろう…。
理想
あらゆるOSで動くこんな感じのsome-magical-
commandが作りたい。
以下はnokogiriをインストールする場合。
# nokogiriのgem installに必要なものが全部入る
some­magical­command nokogiri
# nokogiriがすんなり入る
gem install nokogiri
とはいえ…
さすがにどんなGEMも
ビルドできるようにする
マジカルなものは作れない
妥協したアプローチ
Linuxのディストリビューションで、gemのバイナリが提
供されていれば、そのバイナリをビルドするための情報
が何らかの形で取得できるので、それを手がかりに依存
パッケージを見つける。
時間に限りがあるので
とりあえずALPINEを
対象に試作してみる
ALPINEの調査と検証
調査
APKBUILD
Alpineで、実行時・ビルド時のパッケージの依存関係
などの情報が書かれたファイル。
このファイル中のmakedependsにビルドに必要なパ
ッケージが指定されている。
ALPINEのGITリポジトリ
APKBUILDは以下のaportsというgitリポジトリで管理
されている。
また で直接見るこ
とも可能。
http://git.alpinelinux.org/cgit/aports/
git clone git://git.alpinelinux.org/aports
APORTSのブランチ構成
各バージョン毎にブランチが切られている。
(以下は抜粋)
特定のバージョンのAPKBUILDが入手可能。
2.4­stable
2.5­stable
2.6­stable
2.7­stable
3.0­stable
3.1­stable
3.2­stable
3.3­stable
3.4­stable
APKBUILDファイルのパス
Alpineのnokogiriのパッケージ
ruby-nokogiriの場合。
unmaintained/ruby­nokogiri/APKBUILD
unmaintainedという単語が
Rubyistの不安を掻き立てる…。
APKBUILDの確認
ruby-nokogiriのAPKBUILDを確認する。この中で興
味があるのはmakedependsのみ。
ruby-dev, libxml2-dev, libxslt-devパッケージ
が必要とわかる。
# Contributor: Fabian Affolter <fabian@affolter­engineering.ch>
# Maintainer: Fabian Affolter <fabian@affolter­engineering.ch>
_gemname=nokogiri
pkgname=ruby­$_gemname
pkgver=1.6.7.2
pkgrel=1
pkgdesc="An HTML, XML, SAX, and Reader parser"
url="http://nokogiri.org/"
arch="all"
license="MIT"
depends="ruby ruby­mini_portile2"
depends_dev=""
makedepends="ruby­dev libxml2­dev libxslt­dev"
install=""
subpackages=""
source="http://gems.rubyforge.org/gems/$_gemname­$pkgver.gem"
検証
事前準備
依存関係にないが、Alpineの場合、
以下のパッケージはgemのビルドに必須…無念。
apk add ruby build­base
(*) rubyはgemコマンドも含む。
build-baseはgccなどビルドに必須のツールを含む。
パッケージのインストール
apk add ­­no­cache ruby­dev libxml2­dev libxslt­dev
実行
gem install nokogiri
結果
Building native extensions.  This could take a while...
Successfully installed nokogiri­1.6.8
ERROR:  While executing gem ... (Gem::DocumentError)
    RDoc is not installed: cannot load such file ­­ rdoc/rdoc
世知辛い。
Alpineではrdocなどが別パッケージ。
gem installには--no-riおよび--no-docオプシ
ョンの指定が必要。
再実行
gem install ­­no­ri ­­no­doc nokogiri
結果
Building native extensions.  This could take a while...
Successfully installed nokogiri­1.6.8
1 gem installed
成功!
ちょっと整理
ALPINEでGEMをビルドする
gem名 ->
alpineパッケージ名 ->
alipneパッケージのAPKBUILD(makedepends) ->
gem installに必要なパッケージ名
他のOSに一般化
gem名 ->
OSのパッケージ名 ->
OSのパッケージのビルド用定義 ->
gem installに必要なパッケージ名
試作
TIROFINALEコマンド
https://github.com/xmisao/tirofinale
(*)現在のバージョン0.1系は試作。実装は雑
で、nokogiriくらいしか動かない他、Alpine 3.4のみで
動作する。
#!/usr/bin/env ruby
require 'open­uri'
gem_name = ARGV[0]
alpine_version = "3.4­stable"
apkbuild_url = "http://git.alpinelinux.org/cgit/aports/plain/unmaintained/
apkbuild = open(apkbuild_url){|f| f.read}
makedepends = apkbuild.match(/^makedepends="(.*?)"/).to_a[1].strip.
print makedepends.join(' ')
TIROFINALEのインストール
gem install tirofinale
TIROFINALEコマンドの使用法
入力
コマンドライン引数にgem名を指定する。
tirofinale nokogiri
出力
gemをビルドするためのAlpineのパッケージ名がスペー
ス区切りで返る。
ruby­dev libxml2­dev libxslt­devy
(*)実際の出力に末尾の改行は入らない
デモ
NOKOGIRIのサンプルプログラム
以下サンプルをAlpineで動かしたいとする。
https://github.com/sparklemotion/nokogiri
#! /usr/bin/env ruby
require 'nokogiri'
require 'open­uri'
# Fetch and parse HTML document
doc = Nokogiri::HTML(open('http://www.nokogiri.org/tutorials/installing_no
puts "### Search for nodes by css"
doc.css('nav ul.menu li a', 'article h2').each do |link|
  puts link.content
end
puts "### Search for nodes by xpath"
doc.xpath('//nav//ul//li/a', '//article//h2').each do |link|
  puts link.content
end
DOCKERFILE
サンプルが動作する
Dockerイメージを作成することにする。
FROM alpine:3.4
MAINTAINER xmisao
RUN apk ­­no­cache add ruby build­base
RUN gem install ­­no­ri ­­no­doc tirofinale
# ここがポイント
RUN apk ­­no­cache add `tirofinale nokogiri`
RUN gem install ­­no­ri ­­no­doc nokogiri
COPY sample.rb /root/sample.rb
CMD ruby /root/sample.rb
実行!
docker build ­t tirofinale­demo .
docker run ­it ­­rm tirofinale­demo
結果!
### Search for nodes by css
Docs
GitHub
Installation
Tutorials
Getting Help
以下略
ちゃんと動作しました!
実用化に向けての課題
gemが依存するgemをインストールできるように、自
力でgemの依存関係をたどる必要あり。
APKBUILDファイルは変数のようなものが使えるの
で、正しくビルドするには構文解析が必要。
他のOSの対応 ... 少なくともDebianはapt-get build-dep
があるのでイケそう。他のディストリビューションと
MacやWindowsはどうする?
そもそもOSでバイナリパッケージが提供されない場合
にどうするか。何らかのフォローが必要。
OSやgemのバージョンの相互の関係性など。このあた
りの組み合わせは、CI的な方法でビルド可能なことを
検証して共有したい。
まとめ
APKBUILDを手がかりに、native extensionのgemをビル
ド可能にする方法を、tirofinaleを試作して検証した。
tirofinaleは、Rubyのnative extensionに対する最後の一
射として、今後実用的に使用できるよう開発したい。
ご清聴
ありがとう
ございました

Más contenido relacionado

La actualidad más candente

僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)Yuta Nakano
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825hiro345
 
サーバサイドNodeの使い道
サーバサイドNodeの使い道サーバサイドNodeの使い道
サーバサイドNodeの使い道pospome
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるzuya
 
誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方666oh666
 
自宅サーバ仮想化
自宅サーバ仮想化自宅サーバ仮想化
自宅サーバ仮想化anubis_369
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 Hideo Takahashi
 
Xenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバXenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバzgock
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発Tatsumi Naganuma
 
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たFirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たKenjiro Kubota
 
Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化hiroyuki nakajima
 
Node.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaNode.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaYoshihiro Iwanaga
 
Reactとbabelで簡易タスク管理ツール作ってみた
Reactとbabelで簡易タスク管理ツール作ってみたReactとbabelで簡易タスク管理ツール作ってみた
Reactとbabelで簡易タスク管理ツール作ってみたTsuyoshi Maeda
 
20180925 docker ecs_fargate
20180925 docker ecs_fargate20180925 docker ecs_fargate
20180925 docker ecs_fargateHisayuki Mori
 
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2Nobuhiro Nakashima
 
elixirを使ったゲームサーバ
elixirを使ったゲームサーバelixirを使ったゲームサーバ
elixirを使ったゲームサーバHidetaka Kojo
 

La actualidad más candente (20)

僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)
 
Packerで自動化
Packerで自動化Packerで自動化
Packerで自動化
 
Grunt入門
Grunt入門Grunt入門
Grunt入門
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
サーバサイドNodeの使い道
サーバサイドNodeの使い道サーバサイドNodeの使い道
サーバサイドNodeの使い道
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
 
誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方
 
自宅サーバ仮想化
自宅サーバ仮想化自宅サーバ仮想化
自宅サーバ仮想化
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
 
Xenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバXenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバ
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発
 
Cpi mega mix
Cpi mega mixCpi mega mix
Cpi mega mix
 
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たFirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
 
Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化
 
Node.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaNode.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
 
Reactとbabelで簡易タスク管理ツール作ってみた
Reactとbabelで簡易タスク管理ツール作ってみたReactとbabelで簡易タスク管理ツール作ってみた
Reactとbabelで簡易タスク管理ツール作ってみた
 
20180925 docker ecs_fargate
20180925 docker ecs_fargate20180925 docker ecs_fargate
20180925 docker ecs_fargate
 
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2
 
Azure Bastion の紹介
Azure Bastion の紹介Azure Bastion の紹介
Azure Bastion の紹介
 
elixirを使ったゲームサーバ
elixirを使ったゲームサーバelixirを使ったゲームサーバ
elixirを使ったゲームサーバ
 

Similar a Native Extensionのビルドどうしてますか?

Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築gree_tech
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみようRyo Adachi
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいzaru sakuraba
 
NVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 LinuxNVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 LinuxTomoki SHISHIKURA
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
[CNDT] 最近のDockerの新機能
[CNDT] 最近のDockerの新機能[CNDT] 最近のDockerの新機能
[CNDT] 最近のDockerの新機能Akihiro Suda
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Kazuyuki Mori
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?ogawatti
 
明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築MILI-LLC
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集Wataru NOGUCHI
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成Izumi Tsutsui
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
 
カジュアルに本番データを開発環境に入れる #mysqlcasual
カジュアルに本番データを開発環境に入れる #mysqlcasualカジュアルに本番データを開発環境に入れる #mysqlcasual
カジュアルに本番データを開発環境に入れる #mysqlcasualKazuhiro Oinuma
 
ソフトウェア工学2023 06 コンテナ仮想化
ソフトウェア工学2023 06 コンテナ仮想化ソフトウェア工学2023 06 コンテナ仮想化
ソフトウェア工学2023 06 コンテナ仮想化Toru Tamaki
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築yaegashi
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修Suguru Yazawa
 

Similar a Native Extensionのビルドどうしてますか? (20)

Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみよう
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
 
NVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 LinuxNVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 Linux
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
[CNDT] 最近のDockerの新機能
[CNDT] 最近のDockerの新機能[CNDT] 最近のDockerの新機能
[CNDT] 最近のDockerの新機能
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 
明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
カジュアルに本番データを開発環境に入れる #mysqlcasual
カジュアルに本番データを開発環境に入れる #mysqlcasualカジュアルに本番データを開発環境に入れる #mysqlcasual
カジュアルに本番データを開発環境に入れる #mysqlcasual
 
ソフトウェア工学2023 06 コンテナ仮想化
ソフトウェア工学2023 06 コンテナ仮想化ソフトウェア工学2023 06 コンテナ仮想化
ソフトウェア工学2023 06 コンテナ仮想化
 
Osoljp201204
Osoljp201204Osoljp201204
Osoljp201204
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修
 

Más de Misao X

BestGems.org 2018年の進化
BestGems.org 2018年の進化BestGems.org 2018年の進化
BestGems.org 2018年の進化Misao X
 
Rubyからg rpcでdocker化したkuromojiを使った話
Rubyからg rpcでdocker化したkuromojiを使った話Rubyからg rpcでdocker化したkuromojiを使った話
Rubyからg rpcでdocker化したkuromojiを使った話Misao X
 
RubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書くRubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書くMisao X
 
極貧Webサービス運用 kawasaki.rb #044
極貧Webサービス運用 kawasaki.rb #044極貧Webサービス運用 kawasaki.rb #044
極貧Webサービス運用 kawasaki.rb #044Misao X
 
しょぼいカレンダーからアニメデータベースを作る
しょぼいカレンダーからアニメデータベースを作るしょぼいカレンダーからアニメデータベースを作る
しょぼいカレンダーからアニメデータベースを作るMisao X
 
BestGems.org -RubyGemsランキングサイトのご紹介-
BestGems.org -RubyGemsランキングサイトのご紹介-BestGems.org -RubyGemsランキングサイトのご紹介-
BestGems.org -RubyGemsランキングサイトのご紹介-Misao X
 
VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係Misao X
 

Más de Misao X (7)

BestGems.org 2018年の進化
BestGems.org 2018年の進化BestGems.org 2018年の進化
BestGems.org 2018年の進化
 
Rubyからg rpcでdocker化したkuromojiを使った話
Rubyからg rpcでdocker化したkuromojiを使った話Rubyからg rpcでdocker化したkuromojiを使った話
Rubyからg rpcでdocker化したkuromojiを使った話
 
RubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書くRubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書く
 
極貧Webサービス運用 kawasaki.rb #044
極貧Webサービス運用 kawasaki.rb #044極貧Webサービス運用 kawasaki.rb #044
極貧Webサービス運用 kawasaki.rb #044
 
しょぼいカレンダーからアニメデータベースを作る
しょぼいカレンダーからアニメデータベースを作るしょぼいカレンダーからアニメデータベースを作る
しょぼいカレンダーからアニメデータベースを作る
 
BestGems.org -RubyGemsランキングサイトのご紹介-
BestGems.org -RubyGemsランキングサイトのご紹介-BestGems.org -RubyGemsランキングサイトのご紹介-
BestGems.org -RubyGemsランキングサイトのご紹介-
 
VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係
 

Native Extensionのビルドどうしてますか?