{"id":21285607,"url":"https://github.com/takeyuweb/mizinco","last_synced_at":"2025-06-12T14:06:36.505Z","repository":{"id":775049,"uuid":"461834","full_name":"takeyuweb/mizinco","owner":"takeyuweb","description":"小さなCGIプログラムの構築をより手軽に行えるようにすることが目的のRackベースの簡易フレームワークです。（開発中）","archived":false,"fork":false,"pushed_at":"2010-02-09T11:08:34.000Z","size":87,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-12T14:05:26.311Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://d.hatena.ne.jp/mizincogrammer/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/takeyuweb.png","metadata":{"files":{"readme":"README.rdoc","changelog":null,"contributing":null,"funding":null,"license":"MIT-LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-01-07T04:53:17.000Z","updated_at":"2014-07-09T05:21:02.000Z","dependencies_parsed_at":"2022-08-16T10:50:32.022Z","dependency_job_id":null,"html_url":"https://github.com/takeyuweb/mizinco","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/takeyuweb/mizinco","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takeyuweb%2Fmizinco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takeyuweb%2Fmizinco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takeyuweb%2Fmizinco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takeyuweb%2Fmizinco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/takeyuweb","download_url":"https://codeload.github.com/takeyuweb/mizinco/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takeyuweb%2Fmizinco/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259479578,"owners_count":22864361,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-21T11:21:26.889Z","updated_at":"2025-06-12T14:06:36.469Z","avatar_url":"https://github.com/takeyuweb.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"= mizinco\n\n== mizincoとは\n小さなCGIプログラムの構築をより手軽に行えるようにすることが目的のRackベースの簡易フレームワークです。\nSinatra風味のDSLを提供します。\n\n  require 'mizinco'\n\n  get 'index' do\n    render :text =\u003e 'Hello, \"Mizinco\" World!!'\n  end\n\n  set :app_name, \"hello world\"\n  use Rack::ShowExceptions\n\n  run!\n\nRackベースで、Rackミドルウェアを利用可能な他、適切なファイルを用意すればCGIの他にもFastCGIやrackup等でも動きます。\n\n開発中なので不備も多いです。\n\n== ルーティング\nmizincoは、HTTPメソッドと\u003ctt\u003e_act\u003c/tt\u003eパラメータの値の組で実行するブロックを決定します。\nパスではなくパラメータを使ったのは、簡単な誰でも設置できるCGIプログラムを考えたとき、mod_rewrite等を使う必要のないこの方法の方が良いと判断したためです。\nmod_rewriteを理解している方は、.htaccessを使ってパスをパラメータに分解するなどすれば良いと思います。\n\n  get '' do\n    # Read\n  end\n\n  post '' do\n    # Create\n  end\n\n  put '' do\n    # Update\n  end\n\n  delete '' do\n    # Delete\n  end\n\nなお、\u003ctt\u003e_act\u003c/tt\u003eパラメータの値は空でも\"index\"も同じとして扱います。\nまた、POSTメソッドで\u003ctt\u003e_method\u003c/tt\u003eパラメータを渡すことでHTTPメソッドオーバーライドを行います。\n\n== パラメータへのアクセス\nブロック内で\u003ctt\u003eparams\u003c/tt\u003eを使ってアクセスできます。\n\n  get 'index' do\n    params['hoge'] # =\u003e 'fuga'\n  end\n\n== View\nRails風の\u003ctt\u003erender\u003c/tt\u003eメソッドを用意しています。\n省略した際には、ブロック実行後デフォルトのテンプレートを使います。\n\n  get 'index' do\n    render # views/index.html.erb\n  end\n\n明示的にテンプレートを指定することも出来ます。\n\n  get 'hoge' do\n    render :index # views/index.html.erb\n  end\n\n文字列を渡した時は、ファイル名として認識します。\n\n  get 'hoge' do\n    render 'path-to-file/fuga.erb' # views/path-to-file/fuga.erb\n  end\n\n直接文字列を表示する時には、\u003ctt\u003e:text\u003c/tt\u003eか\u003ctt\u003e:html\u003c/tt\u003eオプションを使います。\n\n  get 'text' do\n    render :text =\u003e '\u003cb\u003eHello World\u003c/b\u003e' # =\u003e \"\u0026lt;b\u0026gt;Hello World\u0026lt;/b\u0026gt;\"\n  end\n\n  get 'html' do\n    render :html =\u003e '\u003cb\u003eHello World\u003c/b\u003e' # =\u003e \"\u003cb\u003eHello World\u003c/b\u003e\"\n  end\n\n\u003ctt\u003e:inline\u003c/tt\u003eで文字列を渡すと、ERBテンプレートとして扱われます。\n\n  get 'index' do\n    render :inline =\u003e '\u003c%= \"Hello\" %\u003e'\n  end\n\n\nなお、テンプレートは標準で\u003ctt\u003e./views\u003c/tt\u003eディレクトリ下に配置しますが、他のディレクトリに設定することもできます。\n\n  set :template_root, File.join(File.dirname(__FILE__), 'templates')\n\n=== テンプレート内での変数の参照\nブロック内で定義したインスタンス変数にアクセスできます。\n\n  get 'index' do\n    @message = 'Hello World!!'\n  end\n\n\u003ctt\u003eviews/index.html.erb\u003c/tt\u003e\n  \u003chtml\u003e\n    \u003chead\u003e\u003c/head\u003e\n    \u003cbody\u003e\n      \u003c%= @message %\u003e\n    \u003c/body\u003e\n  \u003c/html\u003e\n\nヘルパメソッド\u003ctt\u003eh\u003c/tt\u003eを使うことでエスケープされます。\n\n=== ヘルパメソッドの定義\nヘルパメソッドを定義したモジュール（ヘルパモジュール）を作り、\u003ctt\u003ehelper\u003c/tt\u003eで使用を宣言します。\n\n  module MyHelperA\n    def a(str)\n      \"a:#{str}\"\n    end\n  end\n\n  module MyHelperB\n    def b(str)\n      \"b:#{str}\"\n    end\n  end\n\n  helper MyHelperA, MyHelperB\n\n  get 'index' do\n    render :inline =\u003e \"\u003c%=a 'Hello'%\u003e \u003c%=b 'World'%\u003e\"\n  end\n\n== リダイレクト\n\u003ctt\u003eredirect_to\u003c/tt\u003eメソッドを使います。\n\nシンボルを渡すと、指定したアクションにリダイレクトします。\n\n  get 'index'\n    redirect_to :target\n  end\n\n  get 'target'\n    render :text =\u003e 'ここはリダイレクト後のページです。'\n  end\n\n文字列を渡すと、URLとして解釈します。\n\n  get 'index'\n    redirect_to 'http://www.yahoo.co.jp/'\n  end\n\nデフォルトでは302リダイレクトですが、301リダイレクトを行うこともできます。\n\n  get 'old'\n    redirect_to :new, :permanent =\u003e true\n  end\n\n  get 'new'\n    render :text =\u003e 'ここは新しいページです。'\n  end\n\n== フィルタ\nBefore / After Filter を利用できる。\n\n  before do\n    # アクションの前で実行されるブロック\n  end\n\n  after do\n    # アクションの後で実行されるブロック\n  end\n\n\u003ctt\u003e:only\u003c/tt\u003eで実行したいアクションを、\u003ctt\u003e:except\u003c/tt\u003eで実行しないアクションを指定できる。\nアクション名はSymbolか文字列で指定する。複数の時は配列を使える。\n\n  before :only =\u003e :hoge do\n    # hoge でのみ実行されるブロック\n  end\n\n  before :except =\u003e [:hoge, :fuga] do\n    # hoge/fuga 以外で実行されるブロック\n  end\n\n同じアクションに対して複数のフィルタが定義されている場合は、定義順に実行される。\n\n  before do\n    # 最初\n  end\n\n  before do\n    # 2番目\n  end\n\n明示的に \u003ctt\u003efalse\u003c/tt\u003e を返した場合、フィルタ・アクションの実行をそこで中断する。\n\n  before :except =\u003e :logout do\n    redirect_to :logout\n    false\n  end\n\n  before do\n    # logoutアクション以外ではこのフィルタまで処理がまわってこない\n  end\n\n== 作者\n\nCopyright 2009 (c) Yuichi Takeuchi, under MIT License\n\nYuichi Takeuchi \u003cmizincogrammer@gmail.com\u003e\n\nhttp://d.hatena.ne.jp/mizincogrammer\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftakeyuweb%2Fmizinco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftakeyuweb%2Fmizinco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftakeyuweb%2Fmizinco/lists"}