{"id":17865786,"url":"https://github.com/ttskch/esaba","last_synced_at":"2025-03-21T04:32:49.133Z","repository":{"id":25885368,"uuid":"106883501","full_name":"ttskch/esaba","owner":"ttskch","description":"Host your markdown docs on https://esa.io with your own css.","archived":false,"fork":false,"pushed_at":"2022-05-16T08:45:19.000Z","size":343,"stargazers_count":18,"open_issues_count":1,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-01T03:41:34.580Z","etag":null,"topics":["css","esa-io","markdown","scss","webpack"],"latest_commit_sha":null,"homepage":"","language":"PHP","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/ttskch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-10-13T23:53:46.000Z","updated_at":"2022-08-03T00:45:19.000Z","dependencies_parsed_at":"2022-07-27T05:46:20.262Z","dependency_job_id":null,"html_url":"https://github.com/ttskch/esaba","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttskch%2Fesaba","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttskch%2Fesaba/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttskch%2Fesaba/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttskch%2Fesaba/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ttskch","download_url":"https://codeload.github.com/ttskch/esaba/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244738540,"owners_count":20501863,"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":["css","esa-io","markdown","scss","webpack"],"created_at":"2024-10-28T09:24:58.924Z","updated_at":"2025-03-21T04:32:48.770Z","avatar_url":"https://github.com/ttskch.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# esaba\n\n[![Test Status](https://github.com/ttskch/esaba/actions/workflows/test.yaml/badge.svg)](https://github.com/ttskch/esaba/actions/workflows/test.yaml)\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/ttskch/esaba/badges/quality-score.png)](https://scrutinizer-ci.com/g/ttskch/esaba)\n[![Code Coverage](https://scrutinizer-ci.com/g/ttskch/esaba/badges/coverage.png)](https://scrutinizer-ci.com/g/ttskch/esaba)\n[![Latest Stable Version](https://poser.pugx.org/ttskch/esaba/version?format=flat-square)](https://packagist.org/packages/ttskch/esaba)\n[![Total Downloads](https://poser.pugx.org/ttskch/esaba/downloads?format=flat-square)](https://packagist.org/packages/ttskch/esaba)\n\n## esabaとは\n\n[esa.io](https://esa.io) 上の記事データをホストするためのPHP製のWebアプリケーションです。`/post/{記事ID}` というURLでesa.io上の任意の記事を公開できます。\n\n| esa.io | esaba (デフォルトのcss) |\n| --- | --- |\n| ![](https://tva1.sinaimg.cn/large/008i3skNgy1gyk8uwxnz1j31qf0u0q7e.jpg) | ![](https://tva1.sinaimg.cn/large/008i3skNgy1gyk8wcfgfqj31jl0u075s.jpg) |\n\n## esa.io標準の [記事の外部公開](https://docs.esa.io/posts/110) との違い\n\n- 記事の表示に独自のcss/jsを使うことができる（scss/webpack対応）\n- カテゴリやタグごとに細かく公開/非公開を設定できる\n- 社内のみに公開したい場合などに便利（オンプレなのでWebサーバーレベルでアクセス制限可能）\n- 記事中に他の記事へのリンクがある場合は **esabaのURLに変換して出力してくれる** ので、記事本体のURLと公開用のURLを別々に管理する必要がない\n\n## 環境要件\n\n- PHP \u003e=8.0.2\n- Node \u003e=12\n- [Composer](https://getcomposer.org/)\n- [npm](https://www.npmjs.com/)\n\n## インストール方法\n\n### アクセストークンの発行\n\n事前に `https://{チーム名}.esa.io/user/tokens/new` にてRead権限を持った [アクセストークン](https://docs.esa.io/posts/102#%E8%AA%8D%E8%A8%BC%E3%81%A8%E8%AA%8D%E5%8F%AF) を発行しておく必要があります。\n\n![](https://tva1.sinaimg.cn/large/008i3skNgy1gyk90gdd96j31z00l4go4.jpg)\n\n### 任意のサーバーへのインストール\n\n```bash\n$ composer create-project ttskch/esaba # automatically npm install\n$ cd esaba\n$ cp .env{,.local}\n$ vi .env.local # tailor to your env\n\n# and serve under ./public with your web server\n```\n\n### Herokuへのデプロイ\n\n本リポジトリをフォークするか（デプロイ先が公開されてしまってよい場合）、以下の手順にて本リポジトリのコードベースをprivateリポジトリにコピーしてください。\n\n```bash\n$ git clone git@github.com:ttskch/esaba.git\n$ cd esaba\n$ git remote set-url origin git@github.com:{user}/{repo}.git # privateリポジトリのURLをセット\n$ git push\n```\n\nその上で、 `https://heroku.com/deploy?template=https://github.com/{user}/{repo}` をブラウザで開くとHerokuにデプロイできます。\n\n\u003cimg src=\"https://tva1.sinaimg.cn/large/008i3skNgy1gylaf67zcuj30u02afdih.jpg\" width=\"500\"\u003e\n\n## 使い方\n\n### 設定\n\n設定は `.env.local` または `config/esaba.php` で行います。\n\n#### 最小限の設定\n\n```\n# .env.local\n\nESA_TEAM_NAME={チーム名}\nESA_ACCESS_TOKEN={アクセストークン}\n```\n\n#### アクセス制限\n\nカテゴリ/タグに応じて公開/非公開を設定することができます。設定値はJSON形式の文字列とする必要があり `.env.local` ではエスケープなどが面倒なので、`config/esaba.php` で設定するのがおすすめです。\n\n```php\n\u003c?php\n// config/esaba.php\n\nreturn json_encode([\n    // ...\n\n    // empty to publish all\n    'ESABA_PUBLIC_CATEGORIES' =\u003e json_encode([\n//        'path/to/category1',\n//        'path/to/category2',\n    ]),\n\n    'ESABA_PUBLIC_TAGS' =\u003e json_encode([\n//        'tag1',\n//        'tag2',\n    ]),\n\n    // takes priority of over ESABA_PUBLIC_CATEGORIES\n    'ESABA_PRIVATE_CATEGORIES' =\u003e json_encode([\n//        'path/to/category1/subcategory1',\n//        'path/to/category1/subcategory2',\n    ]),\n\n    // takes priority of over ESABA_PUBLIC_TAGS\n    'ESABA_PRIVATE_TAGS' =\u003e json_encode([\n//        'tag3',\n//        'tag4',\n    ]),\n]);\n```\n\nまた、esabaで配信されるすべてのページについて、検索エンジンのインデックス対象とするかどうかを設定することができます。\n\n設定を省略した場合はデフォルトで「インデックス対象としない」設定になります。インデックス対象としたい場合にのみ、以下のように設定を変更してください。\n\n```\n# .env.local\n\nESABA_ENABLE_INDEXING=true\n```\n\n#### HTMLの置換\n\n記事中に他の記事へのリンクがある場合は、esabaでその記事を閲覧するためのURLに自動で置き換えられます。\n\nまた、それとは別に任意の置換ルールを設定しておくこともできます。例えば、すべての `target=\"_blank\"` を削除したい場合は、以下のように設定します。\n\n```php\n\u003c?php\n\nreturn json_encode([\n    // ...\n\n    'ESABA_HTML_REPLACEMENTS' =\u003e json_encode([\n//        '/regex pattern/' =\u003e 'replacement',\n        '/target=(\\'|\")_blank\\1/' =\u003e '',\n    ]),\n]);\n```\n\n#### カテゴリ/タグに応じたcss/jsの切り替え\n\n```php\n\u003c?php\n// config/esaba.php\n\nreturn json_encode([\n    // ...\n\n    // if post matches multiple conditions, tag based condition taks priority of over category based condition\n    // if post matches multiple category based conditions, condition for deeper category is enabled\n    // if post matches multiple tag based conditions, any arbitrarily one is enabled\n    'ESABA_USER_ASSETS' =\u003e json_encode([\n        'path/to/category' =\u003e [\n            'css' =\u003e 'css/your-own.css',\n            'js' =\u003e 'js/your-own.js',\n        ],\n        '#tag_name' =\u003e [\n            'css' =\u003e 'css/your-own.css',\n            // if one of \"css\" or \"js\" is omitted, default.(css|js) is used\n        ],\n    ]),\n]);\n```\n\n上記のように設定した上で、 `./public/css/post/your-own.css` および `./public/js/post/your-own.js` を設置することで、`path/to/category` カテゴリや `#tag_name` タグに該当する記事に対して指定したcss/jsを適用させることができます。\n\n### Webhook\n\n[esa Generic Webhook](https://docs.esa.io/posts/37) を使うことで、esa.io上で記事が作成/更新されたときに、esaba側のキャッシュを自動で更新させることができます。\n\n![](https://tva1.sinaimg.cn/large/008i3skNgy1gyk9f1bvjrj30u00ufwgu.jpg)\n\n```\n# .env.local\n\nESA_WEBHOOK_SECRET={シークレット} # シークレットなしの場合は設定不要\n```\n\n#### `/webhook` へのアクセスの解放\n\nもしWebサーバーレベルでのアクセス制限を設定している場合、 `/webhook` へのアクセスはesa.ioからのwebhookリクエストを受け取るために解放しておく必要があります。\n\n例えば、Apache 2.4の場合は以下のような設定が必要になります。\n\n```\n\u003cLocation /\u003e\n    Require ip xxx.xxx.xxx.xxx\n\u003c/Location\u003e\n\n\u003cLocationMatch ^/(index.php|webhook?)$\u003e\n    Require all granted\n\u003c/LocationMatch\u003e\n```\n\n## 開発\n\n### ローカルサーバー起動\n\n```bash\n$ php -S localhost:8000 -t public\n# or if symfony-cli is installed\n$ symfony serve\n```\n\nブラウザで `http://localhost:8000/post/:post_number` へアクセス。\n\n### webpackによる独自アセットのビルド\n\nesabaはscss/webpackに対応しています。\n\n`./assets/post/user/{エントリー名}.(scss|js)` に独自アセットを配置し、\n\n```bash\n$ yarn build\n# or\n$ npm run build\n```\n\nを実行すると、以下のように `build/{エントリー名}.(css|js)` というパスで利用できるようになります。\n\n```php\n\u003c?php\n// config/esaba.php\n\nreturn json_encode([\n    // ...\n\n    'ESABA_USER_ASSETS' =\u003e json_encode([\n        'path/to/category' =\u003e [\n            'css' =\u003e 'build/your-own.css',\n            'js' =\u003e 'build/your-own.js',\n        ],\n    ]),\n]);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fttskch%2Fesaba","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fttskch%2Fesaba","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fttskch%2Fesaba/lists"}