タグ

ブックマーク / kohkimakimoto.hatenablog.com (12)

  • Goでジョブキューを実装した - オープンソースこねこね

    HQというGoで実装したジョブキューを公開しました。 github.com WebのUIもあります。 概要 以下の特徴があります。 Goによる実装で、シングルバイナリ。 スタンドアロンのHTTP APIサーバー。ジョブのデータベースも組み込みであるため、別途特別な依存を必要としないで動作する。 シンプルでプログラミング言語非依存。HTTP APIでジョブを投入し、ジョブはHTTP POSTメッセージをワーカーアプリケーション(Webアプリ)に送信するというアーキテクチャ。 フロントエンドとしてCLIとWebUIを組み込みでサポート。 上記のリポジトリのREADMEにも載せてありますが、ざっくりジョブのフローを図解すると、以下のようなアーキテクチャになっています。 HTTP APIでジョブ(JSON)を投入します。HQはジョブを取り出し、ジョブに記載されたURLにHTTP POSTして、別途

    Goでジョブキューを実装した - オープンソースこねこね
  • シェルスクリプトの代わりにPythonを使う - オープンソースこねこね

    これまで、開発や運用時に使う、ちょっとしたコマンドラインツール、自動化スクリプトは、主にBashのシェルスクリプトで実装していたのですが、最近このような用途にはPythonを使うようにしています。 Bashスクリプトへの不満 スクリプトの実装方針 ポータビリティ重視のための縛りPythonプログラミング Tips __future__モジュールでバージョン2、3両方に対応させる バージョン2、3で異なるモジュールを、同じ名前で読み込む バージョン2、3を判別する関数を用意する よく使うスニペット 文字に色をつける 赤い文字でエラーメッセージを出力して終了する 外部コマンド実行する テキストをファイルに出力する ファイルに実行権限をつける スクリプトの同時、多重起動防止する コマンドライン・オプションの解析 HTTPリクエスト まとめ Bashスクリプトへの不満 Bashのスクリプト実装にお

    シェルスクリプトの代わりにPythonを使う - オープンソースこねこね
  • SSHラッパーコマンドEsshのv1.0.0をリリースしました - オープンソースこねこね

    開発の経緯 機能 利用例 ログイン時にターミナルの色を変える アプリケーションのデプロイ Esshは、zsh補完やLuaスクリプトによる動的なコンフィグレーションなど、便利機能を実装した、sshのラッパーコマンドです。 github.com ドキュメントをまとめたWebサイトも作成しました。 https://essh.sitespread.net/ 上記Webサイトのトップにasciinemaで撮ったターミナルオペレーションのデモを乗せましたので、そちらを見ていただければ、どういったものか大体のことはわかると思います。 開発の経緯 2015/11に以下の記事を書き、Zsshというコマンドを作成しました。 kohkimakimoto.hatenablog.com その後、CentOSのリポジトリにzsshというパッケージが存在していたため、コマンド名をzsshからesshに変え、自分の利用に

    SSHラッパーコマンドEsshのv1.0.0をリリースしました - オープンソースこねこね
    ngyuki
    ngyuki 2017/04/12
  • PHP5.5+OPcacheでシンボリックリンクでデプロイするとキャッシュが消えない - オープンソースこねこね

    という問題にぶち当たりました。 どういうことかを話す前にPHPアプリケーションの個人的なデプロイ構成について説明します。 要はCapistranoのデプロイと同様なのですが、デプロイ先は以下のようなディレクトリ構成になっています。 . |-- current -> /path/to/releases/20141011000001 |-- releases | |-- 20141011000000 | `-- 20141011000001 currentがアプリケーションサーバ(apacheやphp-fpm)から参照される箇所で、releases配下の最新のアプリケーションへのシンボリックリンクになっている。新しくアプリをデプロイするとreleases配下に20141011000002のようなタイムスタンプで新しくディレクトリが作成され、そこにアプリケーションのコードが配置される。その後cu

    PHP5.5+OPcacheでシンボリックリンクでデプロイするとキャッシュが消えない - オープンソースこねこね
  • Goでプロビジョニングツールを作った - オープンソースこねこね

    GitHub - kohkimakimoto/cofu: Minimum configuration management tool written in Go.github.com CofuというサーバプロビジョニングツールをGoで実装しました。Itamaeを参考に作りました。実装言語の違い(ItamaeはRubyによる実装)はありますが、外部仕様、内部実装、共にかなり似せて作ってあるので、ItamaeまたはItamaeが参考にしているchefを使ったことがあると、理解は簡単かと思います。特徴をざっくり説明すると、 ローカルでのプロビジョニングのみ対応。SSHなどでのリモートサーバのプロビジョニングはサポートしない Goなので実行ファイル一個で動く。導入が簡単 レシピはLuaのDSLで記述する 今のところ動作プラットフォームはRedHat(CentOS)のみをサポート あたりでしょうか。

    Goでプロビジョニングツールを作った - オープンソースこねこね
    ngyuki
    ngyuki 2016/06/30
  • ループバックドメイン - オープンソースこねこね

    自分用開発メモ。 サブドメインを含めて127.0.0.1として登録されているドメイン。 lvh.me loopback.jp devd.io

    ループバックドメイン - オープンソースこねこね
    ngyuki
    ngyuki 2015/12/23
    "サブドメインを含めて127.0.0.1として登録されているドメイン"
  • sshのラッパーコマンドを作った - オープンソースこねこね

    GoでSSHコマンドに便利機能を追加したコマンドを作りました。 2017/04/11 追記: この記事の内容は古くなっています! 2017/04/11時点の最新の仕様は、次の記事を参照してください SSHラッパーコマンドEsshのv1.0.0をリリースしました - オープンソースこねこね 追記ここまで。以下は2015/11時点の古い情報となります。 github.com 機能として Luaで~/.ssh/configに相当する設定を書ける。 zshの補完機能を使って、接続先一覧を出す。 サーバ接続時にフックを仕込める。自分はスクリーンの色を変えるの使っている。 複数のリモートサーバにまとめてコマンドを実行する。 といったところです。詳細はリポジトリのREADMEを見ていだければと思います。 ビルド済みバイナリをリリースページにおいてあるので、インストールはダウンロードして解凍してパスの通っ

    sshのラッパーコマンドを作った - オープンソースこねこね
  • JenkinsとDockerでTravisっぽいCIサーバを育ててみている - オープンソースこねこね

    最近プライベートなプロジェクトのCIにはcircleciとかが人気なんでしょうかね。 GitHub 時代のデプロイ戦略 - naoyaのはてなダイアリー 近頃のCIサーバはアプリケーションのテストだけじゃなく、インフラのテストやデプロイ、ChatOpsなどgitやチャットツールなど他のシステムと連携した自動化のための必須プラットフォームといった感じになってきてる。とはいえ、趣味で開発しているプロダクトに余計なコストはかけたくない。ああ、でもやっぱCIはしたい。 そんなわけで以前から契約だけしていて放置気味だった、さくらのVPSの1GにjenkinsをたててオレオレCIを育てているのでその辺のことを書いてみる。CIの実行環境はDockerを使って仮想化し、ジョブの内容はTravisやcircleciのようにリポジトリ側のyamlファイルに記述できるようにしてみた。構成をざっくりと図解すると以

    JenkinsとDockerでTravisっぽいCIサーバを育ててみている - オープンソースこねこね
    ngyuki
    ngyuki 2014/10/14
    やろうやろうと思って未だに手を出していないなぁ
  • pecoをランチャーのようにして使う - オープンソースこねこね

    前回に引き続き、pecoが大変気に入ったので、その後もいろいろネットで情報さがしたりしてました。それで peco/percolでCUIなスニペットツールを作ってみる の記事を見て同じこと導入してみました。いやはや便利。元記事に感謝。ついでに多少カスタマイズして、スニペットの先頭にラベルをつけてみました。 手順 zshの場合は以下のような関数を.zshrcなどに記述しておく function peco-snippets() { local line local snippet if [ ! -e ~/.snippets ]; then echo "~/.snippets is not found." >&2 return 1 fi line=$(grep -v "^#" ~/.snippets | peco --query "$LBUFFER") if [ -z "$line" ]; the

    pecoをランチャーのようにして使う - オープンソースこねこね
  • Bashスクリプトで実行ファイルのディレクトリを取得する - オープンソースこねこね

    よくやるのが以下の記述だったのだけれど SCRIPT_DIR=$(cd $(dirname $0); pwd) これだと、このスクリプトをシンボリックリンクから呼び出したときに、 実ファイルのパスでなくリンク先のディレクトリが取得されてしまっていた。 シンボリックリンクから呼び出されたときも、実ファイルのパスを返すようにするには、 SCRIPT_DIR=$(cd $(dirname $(readlink $0 || echo $0));pwd) のようにすればよさげ。 追記)id:ngyukiさんにご指摘をいただいたので修正。 スクリプトがシンボリックリンクなディレクトリにあることを考慮して readlink -f とか cd -P とか pwd -P とかにするとなお良いのかな おお、なるほど。やってみたら確かにシンボリックリンクなディレクトリにあるとうまくいかなかった。なので修正した以

    Bashスクリプトで実行ファイルのディレクトリを取得する - オープンソースこねこね
    ngyuki
    ngyuki 2014/06/12
    スクリプトがシンボリックリンクなディレクトリにあることを考慮して readlink -f とか cd -P とか pwd -P とかにするとなお良いのかな
  • Composerがパッケージのstabilityを解決するしくみ - オープンソースこねこね

    PHPとComposerで先日composer/composerのdev-masterに依存したプログラムを作っていたら、composer installのときに以下のようなエラーがでてインストールできない問題にぶちあたりました。 Your requirements could not be resolved to an installable set of packages. Problem 1 - kohkimakimoto/altax v3.0.6 requires composer/composer dev-master -> no matching package found. ... 解決方法はcomposer.jsonに"minimum-stability": "dev"と"prefer-stable": trueを指定するか、対象のパッケージに"composer/compo

    Composerがパッケージのstabilityを解決するしくみ - オープンソースこねこね
  • PHP Webアプリケーションから非同期にコマンドを実行するライブラリをつくりました。 - オープンソースこねこね

    こんなの作りました。 BackgroundProcess Webのプロセスから重い処理を実行したいのだけど。。。 PHPCSVファイルなどから一括で大量のデータ投入を行いたいときがあります。 これをWebアプリケーションのプロセスでやろうとすると、処理時間が長いため、だいたいプロセスがタイムアウトしてエラーになってしまいます。困ったものです。 こういうとき、代わりにコマンドラインのプログラムとして実装したりするんですが、任意のタイミングで処理したい場合、コマンド実行する以上サーバにターミナルでログインできる技術者しかデータ投入作業ができなくなってしまいます。 もっとだれにでもできるように、やっぱりWebアプリケーションのインターフェースが欲しくなるのが人情です。 Webアプリから非同期にコマンドを実行する この要件を満たす簡単な方法は、以下のようなコードでWebプロセスから外部コマンドを

    PHP Webアプリケーションから非同期にコマンドを実行するライブラリをつくりました。 - オープンソースこねこね
    ngyuki
    ngyuki 2013/09/04
    うーん、mod_php から exec などでバックグラウンドにプロセスを起動するのは無理があると思ってる。Apache の再起動に巻き込まれたりするから /
  • 1