検索条件
お知らせ
現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
SSHが使えない悲劇に出会った時に。CentOS 7.7で確認。
パスワードは平文保存されるっぽいので、そこら辺は注意が必要。
- 認証情報をキャッシュする設定にする
git config --global credential.helper cache
- キャッシュのタイムアウトを1年くらいにしとく
git config --global credential.helper 'cache --timeout=31536000'
Env |
Ver |
React |
17.0.1 |
react-router-dom |
5.2.0 |
TypeScript |
4.1.3 |
import React from 'react';
import ReactDOM from 'react-dom';
import './index.scss';
import { BrowserRouter } from 'react-router-dom';
import { RootRoute } from './routes/RootRoute';
// ドメインルート以外にReactを設置する場合に必要
// e.g. `https://www.example.com/react/` に設置する場合 `/react` を設定
const basename = process.env.REACT_APP_BASE_NAME ?? undefined;
ReactDOM.render(
<React.StrictMode>
{/* `useHistory()` 用のDIラッパー */}
<BrowserRouter basename={basename}>
{/* ルーティング設定をまとめたコンポーネント */}
<RootRoute />
</BrowserRouter>
</React.StrictMode>,
document.getElementById('root')
);
- ルーティングの定義、これがあると後々の管理が楽
- スプレッド演算子で
Route
に対して展開できるように記述しておく
export const AppRoute = {
// React のルート定義
root: {
path: '/',
key: '/',
exact: true, // 完全一致
component: App,
},
// 404 定義
notfound: {
component: NotFound,
},
// `/foo` 以下のルーティング定義
foo: {
// `/foo` のルート定義
root: {
path: '/foo',
key: '/foo',
component: FooRoute,
},
// 以下、 `/foo` 配下のページのルーティング定義
hoge: {
path: '/foo/hoge',
key: '/foo/hoge',
component: HogePage,
},
piyo: {
path: '/foo/piyo',
key: '/foo/piyo',
component: PiyoPage,
},
},
};
export const RootRoute = () => {
return (
{/* `Route` は `Switch` で囲む */}
<Switch>
{/* root */}
<Route {...AppRoute.root} />
{/* foo */}
<Route {...AppRoute.foo.root} />
{/* bar */}
<Route {...AppRoute.bar.root} />
{/* 404 */}
<Route {...AppRoute.notfound} />
</Switch>
);
};
export const FooRoute = () => {
return (
{/*
`Context` は `Switch` の外に出す
`Switch` の中に `Context` を書くと更に `Switch` でネストする必要がある
*/}
<FooContext.Provider value={FooContextDefault}>
<Switch>
{/* eslint-disable-next-line array-callback-return */}
{Object.entries(AppRoute.foo).map(([idx, route]) => {
if (idx !== 'root') {
/* `'root'` 以外の全ノードを展開 */
return <Route {...route} />;
}
})}
{/* 404 */}
<Route {...AppRoute.notfound} />
</Switch>
</FooContext.Provider>
);
};
自作npmコマンドを蹴る方法のメモ
Env |
Ver |
Node.js |
12.18.3 |
npm |
6.14.8 |
- Node.jsのプロジェクトを作成
npm init
とか適当に
- package.jsonに以下を追加
"bin": {
"my-npm-command": "./index.js"
}
- Node.jsのCLIを作成
- 以下はサンプル
#!/usr/bin/env node
console.log('my-npm-command');
npm link
を叩き、my-npm-command
を実行して動いてればOK
- 外したくなったら
npm unlink
PHPでClassをrequire
せずに使えるやつ
Laravelのrequest()
とかがどうやって呼ばれてるのかを調べていくうちに辿り着いたのでメモがてら
Class
は簡単に読み込めるけど、Function
は一筋縄ではいかなさそう
ついでにClass
に好き勝手プロパティ増やせることも発見した
spl_autoload_registerを使う。Laravelはcomposerが上手いことやってくれてるっぽかった
<?
function regist() {
spl_autoload_register(function() {
require './Hoge.php';
require './Piyo.php';
});
}
適当に用意
<?
class Hoge {
public $hoge;
}
<?
class Piyo {
public $piyo;
}
ついでに好き勝手にプロパティも生やす
<?
require './bootstrap.php';
// ここでクラスをautoloadする
regist();
// どこからも呼んでないけど
$h = new Hoge;
// 生やせる
$h->fuga = "aaa";
$h->hogepiyo = "bbb";
// 使える
$p = new Piyo;
$p->fuga = "aaa";
$p->hogepiyo = "bbb";
var_dump($h, $p);
/*
結果
class Hoge#2 (3) {
public $hoge =>
NULL
public $fuga =>
string(3) "aaa"
public $hogepiyo =>
string(3) "bbb"
}
class Piyo#3 (3) {
public $piyo =>
NULL
public $fuga =>
string(3) "aaa"
public $hogepiyo =>
string(3) "bbb"
}
*/
composer init
でプロジェクトを作成
composer require [パッケージ名]
でパッケージを入れる
- 名前空間を作る場合、
composer.jspn
に以下のセクションを作成
- リファレンス: getcomposer.org
"autoload": {
"psr-4": {
"App\\": "src/App" // 名前空間と対応するパス
},
"classmap": [
"src/App" // クラスを読み込むディレクトリのルート
]
}
autoload
やclass_alias
などを設定するbootstrap.php
を適当に作成
- この
bootstrap.php
はエントリポイントからrequire_once
などで読み込無事で有効化する
phpunit
を組み込む場合
composer require --dev phpunit/phpunit
でインストール
composer.json
に以下のセクションを作成
"scripts": {
"test": [
"phpunit --bootstrap bootstrap.php test"
]
}