お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
ソフトウェア::Git

SSHが使えない悲劇に出会った時に。CentOS 7.7で確認。

パスワードは平文保存されるっぽいので、そこら辺は注意が必要。

  1. 認証情報をキャッシュする設定にする
    1. git config --global credential.helper cache
  2. キャッシュのタイムアウトを1年くらいにしとく
    1. git config --global credential.helper 'cache --timeout=31536000'
投稿日:
ライブラリ::React言語::TypeScript

react-routerでRouteを切る実装例

確認環境

Env Ver
React 17.0.1
react-router-dom 5.2.0
TypeScript 4.1.3

サンプルコード

index.tsx

  • ここに大元のルーティングを実装
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')
);

AppRoute.ts

  • ルーティングの定義、これがあると後々の管理が楽
  • スプレッド演算子で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,
    },
  },
};

RootRoute.tsx

  • 各階層の基底ルーティング管理
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>
  );
};

FooRoute.tsx

  • /foo階層配下の管理用
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>
  );
};
投稿日:
Node.js::npm

自作npmコマンドを蹴る方法のメモ

Env Ver
Node.js 12.18.3
npm 6.14.8

手順

  1. Node.jsのプロジェクトを作成
    1. npm initとか適当に
  2. package.jsonに以下を追加
"bin": {
  "my-npm-command": "./index.js"
}
  1. Node.jsのCLIを作成
    1. 以下はサンプル
#!/usr/bin/env node
console.log('my-npm-command');
  1. npm linkを叩き、my-npm-commandを実行して動いてればOK
    1. 外したくなったらnpm unlink
投稿日:
言語::PHP

PHPでClassをrequireせずに使えるやつ
Laravelのrequest()とかがどうやって呼ばれてるのかを調べていくうちに辿り着いたのでメモがてら

Classは簡単に読み込めるけど、Functionは一筋縄ではいかなさそう
ついでにClassに好き勝手プロパティ増やせることも発見した

autoloaderを実装

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;
}

autoloaderを呼んで使う

ついでに好き勝手にプロパティも生やす

<?
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"
}

*/
投稿日:
言語::PHP

手順

  1. composer initでプロジェクトを作成
  2. composer require [パッケージ名]でパッケージを入れる
  3. 名前空間を作る場合、 composer.jspnに以下のセクションを作成
    1. リファレンス: getcomposer.org
"autoload": {
    "psr-4": {
        "App\\": "src/App" // 名前空間と対応するパス
    },
    "classmap": [
        "src/App" // クラスを読み込むディレクトリのルート
    ]
}
  1. autoloadclass_aliasなどを設定するbootstrap.phpを適当に作成
    1. このbootstrap.phpはエントリポイントからrequire_onceなどで読み込無事で有効化する
  2. phpunitを組み込む場合
    1. composer require --dev phpunit/phpunitでインストール
    2. composer.jsonに以下のセクションを作成
    "scripts": {
        "test": [
            "phpunit --bootstrap bootstrap.php test"
        ]
    }