カテゴリー
フリーランスエンジニア

【フリーランス】マネーフォワードの会社設立つかってみた

今回は、巷で流行っている個人事業主と法人との二刀流をしようと思い法人を作りましす。

2023/05/06 現在:定款認証まで完了

わからなかった事や注意点も紹介していきます。

始める前に揃えた方が良いもの一覧

法人印:作成に2週間かかるものがございます。私はローマ字と漢字で書体を変更してもらったので、13日程かかりました。

本店住所:バーチャルオフィスなどをご利用の際は、定款にも登録が必要になるので、手続きを済ませてからの方が良いです。

登録免許税を半額にする方法

特定創業支援等事業の制度を利用する。

法人の場合、最低税額15万円かかる登録免許税が7.5万円になります。

合同会社の場合、最低税額6万円かかる登録免許税が3万円になります。

松戸市で確認した内容だと、1一ヶ月以上かけて、4回以上指定の相談会社などを利用する事が条件でした。

私は設立予定日まで、あまり余裕がないので利用できませんでした。

注意事項

電子署名は不要

マネーフォワード経由で電子定款を作成して頂けるので、Adobeの「Acrobat Reader」の不要です。

電子定款について

作成するのに5営業日かかります。

特急+1万円で3営業日で依頼可能です。

会計をご契約いただくと5000円が無料になります。※2023/05/07現在

CD-Rについて

公証人役場で登記関連の書類をCD-Rで登録して、頂けます。

場所によっては、不要な場合はがあるみたいなので前もって問い合わせても良いと思います。

ロイヤルホームセンターなどで探しましたが、データ用のCD-R50枚セットなどで余分だったので、Amazonで10枚セットを購入しました。

ダイソーは、音楽用のみでした、、、

綺麗にする小技

綺麗にしたいタイプで、試行錯誤した結果の方法です。

お役に立てればなによりです。

ホチキスで同じ幅に留める方法

ホチキスをよーくみたら、引っ掛ける箇所がありました。

こちらに引っ掛けて、ホチキスをする事で端から同じ幅で留める事ができます。

契印を綺麗に押す準備

ホチキス後に紙に折り目を入れるところで、斜めになり追加で折り目をつけで汚くなりました、、、

さすがに抵抗があるので、やり直しました。

プラレールをホチキスに合わせておきます。

あとは右のプラレールをズレないように抑えながら、左のプラレールで挟んで擦るだけです。

綺麗な折線ができたので、開いて折り目を丁寧につけて契印をするだけです。

市川公証人合同役場

  • CD-Rを求められました。
  • 役場の反対側に駐車場があるみたいです。:役場内に駐車場案内がありました。
カテゴリー
EC-CUBE

【EC-CUBE4】よく使うコマンド

[temp id=3]

使用頻度の高いコマンド

キャッシュクリア

bin/console c:c --no-warmup

プロキシ作成・再構築

下記フォルダに作成される※削除してもコマンドで作り直せる
eccube/app/proxy/entity/src:src + customizeのentity
eccube/app/proxy/entity/app:pluginのEntity

bin/console eccube:generate:proxies

全ての実行されていないマイグレーション実行

bin/console doctrine:migrations:migrate

EntityからDBへ反映

bin/console doctrine:schema:update --dump-sql --force

空のマイグレーションファイル作成

bin/console doctrine:migrations:generate

マイグレーションファイルを指定して実行

bin/console doctrine:migrations:execute 20210324060716 --up
bin/console doctrine:migrations:execute 20210324060716 --down
カテゴリー
筋トレ

【筋トレ】上半身

[temp id=3]

55kg

25歳 携帯電話販売→未経験のWEBエンジニアへ転職 4kg増加

30歳 フリーランスエンジニアに転身 3kg増加

33歳 2人の子供1歳2歳で 3kg増加

65kg

10kgほど増加して、ダラシない体とサヨナラすべく、筋トレを始めることにした!

今まで、何度か挫折してます、、、

BCAA&プロテイン

今回からは、嫁からお薦めされたBCAAも併せて服用してトレーニングします。

アマゾンプライムセールで、まとめ買い!

1ヶ月経ちますが、BCAAの効果で筋肉痛が酷くならず継続中です!

カテゴリー
PHP

【PHP】メモ

以外に書く事がなかったので、随時更新する

PHP調べたメソッド

try&catchでエラー誘発

try中にエラーを発生させたい時

 try {
     // 例外が発生する可能性のあるコード
 

     // ↓↓ 例外発生可能
     throw new Exception();
 } catch (Exception $e) {
     // 例外が発生した場合に行う処理
 } 

PHPエラー

FPDIライブラリ

エラー内容

This PDF document probably uses a compression technique which is not supported by the free parser shipped with FPDI. (See https://www.setasign.com/fpdi-pdf-parser for more details)

FPDIライブラリで、テンプレートファイルを使用する際にエラー発生

解決方法

PDFの読み込みを行うFPDIは、有償のパーサーを別途導入しない場合、PDF 1.5以上のファイルをパースすることができません。テンプレートとなるPDFファイルは PDF 1.4以下の圧縮形式で作成する必要があります。

Acrobat Pro DCをダウンロード(7日間無料期間があった)

Acrobat Pro DCをダウンロード

Acrobat Pro DCを起動して「高度な最適化」
サイズが縮小される場合のみ画像を最適化のチェックを外す
テンプレートファイルを入れ替える
カテゴリー
育児ブログ

【育児】子育てで重宝するアイテム

[temp id=3]

年子の子持ちです。

実は第二子出産から6ヶ月間3時間労働で、家庭優先で育児に専念しております。

優先度:大

特におすすめの商品です。

ベビーモニター

寝室で寝かせた後に活用してます。

抱っこしに行かないと寝れない時の判断に使えます。

これがあるだけで、仕事や家事の効率が上がります。

https://amzn.to/3nohS6p

手動の鼻水吸引機

子供の風邪は、結構長引きます。

これがあれば自動の鼻水吸引機は、なくても良いかも!

使用しているうちに、引けなくなるが油をさせば直るみたいなので覚えておきましょう!!

https://amzn.to/331SgYw

優先度:中

センサーライト

どこにでもつけれて、ネジで固定や両面テープでも設置できます。

やっとの思いで寝かしつけできた子供を起こさないように、階段に設置しています。

https://amzn.to/32P1yHD

オイルヒーター

冬場の暖房は、25万円ぐらいの「しろくまくん」で高性能エアコンでしたが加湿器とセットでも乾燥がひどくオイルヒーターを購入しました。

火傷しにくいだけで、何秒も触っていたら火傷するので注意が必要です。

https://amzn.to/3f9AWUt

トランポリン

長男の2回目のクリスマスプレゼントです。

周りにネットがあるトランポリンは、なかなかありませんでした!

組み立ては、T字の道具の使い方がわかれば2時間ぐらいで組み立てられます!

https://amzn.to/3rYI6k2

カテゴリー
システム開発技術 マイグレーション

【マイグレーション】migration

まったりのんびり、@vVv_kenshi_vVvです!

EC-CUBE4の開発でよく使用するので、記事にしています。

注意事項

私の経験則で書いている事なので、すべて正しいというわけではございませんのでご了承くださいませ。

エスケープに注意

dtb_csvのカラムに「entity_name」があり「//」ダブルスラッシュで登録されています。

phpとsqlで2回エスケープされるみたいで「////////」8個記述しなければ「//」になりません。

ちなみに「/」で登録されても機能します。

プラグインなどは「/」で追加登録される事が多いみたいです。

マイグレーションで非推奨作業

何でもかんでもマイグレーションで、やらない事

  • テーブルは作成しない
  • テーブルは削除しない
  • テーブルのカラム「追加・削除」はしない
  • テーブルのカラム内容変更はしない

EC-CUBE4でカスタマイズするなら、上記の対応はスキーマの更新で可能です。

上記のようなマイグレーションを使用した後に、スキーマを更新したりプラグインをインストールや削除したりすると、Entityの方へ書き換えられて意図しないバグが発生する可能性があります。

スキーマの更新

対象のEntityの内容を変更してスキーマ更新コマンドで可能です。

スキーマの更新内容確認コマンド

php  bin/console doctrine:schema:update --dump-sql

スキーマ更新コマンド

php  bin/console doctrine:schema:update --dump-sql --force

migrationコマンド一覧

ついつい調べてしまう、忘れっぽいあなたに捧げる記事です。

先頭の「php」は、サーバーの設定によってログインユーザーでは権限で弾かれる可能性があるので「php」から実行しています。

マイグレーションを実行すると「migration_versions」へデータが登録されます。

データを削除し、マイグレーションを流し直しも可能です。

DELETE FROM migration_versions WHERE version = 'XXXX'

全ての実行されていないマイグレーション実行

php bin/console doctrine:migrations:migrate

マイグレーションファイルを指定して実行

php bin/console doctrine:migrations:execute 2021XXXXXXXXXX  --down 
php bin/console doctrine:migrations:execute 2021XXXXXXXXXX  --up

マイグレーションの状態確認

php bin/console doctrine:migrations:status

マイグレーションファイルを作成

php bin/console doctrine:migrations:generate

マイグレーション履歴の削除

php bin/console doctrine:migrations:version 2021XXXXXXXXXX --delete

マイグレーションファイル

コマンドで作成したマイグレーションファイル

<?php declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20220105152818 extends AbstractMigration
{
    public function up(Schema $schema) : void
    {
        // this up() migration is auto-generated, please modify it to your needs

    }

    public function down(Schema $schema) : void
    {
        // this down() migration is auto-generated, please modify it to your needs

    }
}

定数やDBからデータ取得も可能

サンプルコード:dtb_csvへ項目追加

final class Version2022XXXXXXXXXX extends AbstractMigration
{

    const ENTITY_NAME = 'Eccube\\\Entity\\Product';
    const FIELD_NAME = 'new_column';

    public function up(Schema $schema) : void
    {        
        $this->addSql("INSERT INTO dtb_csv (csv_type_id, creator_id, entity_name, field_name, reference_field_name, disp_name, sort_no, enabled, create_date, update_date, discriminator_type) VALUES ('1', null, 'Eccube////////Entity////////Product', 'new_column', 'new_column', '新規項目', '10', '1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'csv');");
    }

    public function down(Schema $schema) : void
    {
        $_ = function($s){return $s;};

        $targetId = $this->connection->fetchColumn("SELECT id FROM dtb_csv WHERE entity_name = '{$_(self::ENTITY_NAME)}' AND field_name = '{$_(self::FIELD_NAME)}'");

        if (!empty($targetId)) {
            $this->addSql("DELETE FROM dtb_csv WHERE id = $targetId;"); 
        }

   }
}

配列も取得可能

$targetId = $this->connection->fetchColumn(・・・);
↓
$targetId = $this->connection->fetchArray(・・・);
カテゴリー
EC-CUBE

【EC-CUBE4】注文ステータス追加

[temp id=3]

コンビニ支払いのステータス追加

mtb_order_statusのid2が空いているので使用する

DB(テーブル)にデータ追加

  • mtb_order_status:入金待ち追加
  • mtb_order_status_color:入金待ちカラー追加
  • mtb_customer_order_status:入金待ち追加

OrderStatus(Entity)へ定数

本体ソースに追加しするか、継承クラスで定数を追加する

Traitには定数を追加できない。

定数「WAIT_PAYMENT」の追加

<?php
 namespace Customize\Entity;

 use Eccube\Entity\OrderStatus as BaseEntity;

 if (!class_exists('Customize\Entity\OrderStatus')) {

 /** 親クラスの定数宣言を拡張する目的に作成しています */
 class OrderStatus extends BaseEntity {
     /** 入金待ち */
     const WAIT_PAYMENT = 2; }
 }

注文ステータス遷移設定

app/config/packages/order_state_machine.php

編集箇所抜粋

'places' => [
     (string) Status::NEW,
     (string) Status::WAITI_PAYMENT,
     (string) Status::CANCEL,
     (string) Status::IN_PROGRESS,
     (string) Status::DELIVERED,
     (string) Status::PAID,
     (string) Status::PENDING,
     (string) Status::PROCESSING,
     (string) Status::RETURNED,
     (string) Status::CANCEL_ENTRY,
     (string) Status::CANCEL_PROCESSING
 ],

入金待ちから変更できるステータスの追加

※複数の場合は「配列で渡す」

'transitions' => [
    'pay' => [
        'from' => (string) Status::NEW,
        'from' => [(string) Status::NEW, (string) Status::WAIT_PAYMENT],
        'to' => (string) Status::PAID,
    ],
    'packing' => [
        'from' => [(string) Status::NEW, (string) Status::PAID, (string) Status::CANCEL_ENTRY],
        'to' => (string) Status::IN_PROGRESS,
    ],
    'cancel' => [
        'from' => [(string) Status::NEW, (string) Status::IN_PROGRESS, (string) Status::PAID, (string) Status::CANCEL_PROCESSING],
        'to' => (string) Status::CANCEL,
    ],
    'back_to_in_progress' => [
        'from' => (string) Status::CANCEL,
        'to' => (string) Status::IN_PROGRESS,
    ],
    'ship' => [
        'from' => [(string) Status::NEW, (string) Status::PAID, (string) Status::IN_PROGRESS, (string) Status::CANCEL_ENTRY],
        'to' => [(string) Status::DELIVERED],
    ],
    'return' => [
        'from' => (string) Status::DELIVERED,
        'to' => (string) Status::RETURNED,
    ],
    'cancel_return' => [
        'from' => (string) Status::RETURNED,
        'to' => (string) Status::DELIVERED,
    ],
    'cancel_entry' => [
        'from' => [(string) Status::NEW, (string) Status::IN_PROGRESS, (string) Status::PAID, (string) Status::DELIVERED, (string) Status::CANCEL_PROCESSING, (string) Status::WAIT_PAYMENT],
        'to' => (string) Status::CANCEL_ENTRY,
    ],
    'cancel_processing' => [
        'from' => (string) Status::CANCEL_ENTRY,
        'to' => (string) Status::CANCEL_PROCESSING,
    ],
],

OrderStateMachineでステータス変更処理

キャンセルの場合は、在庫やポイントを戻してくれる

$this->orderStateMachine->apply($Order, $changeStatus);

OrderStateMachineでステータスの処理を追加

在庫を戻したり、ポイントの減算処理も追加できる

    public static function getSubscribedEvents()
    {
        return [
            'workflow.order.completed' => ['onCompleted'],
            'workflow.order.transition.pay' => ['updatePaymentDate'],
            'workflow.order.transition.cancel' => [['rollbackStock'], ['rollbackUsePoint']],
            'workflow.order.transition.back_to_in_progress' => [['commitStock'], ['commitUsePoint']],
            'workflow.order.transition.ship' => [['commitAddPoint']],
            'workflow.order.transition.return' => [['rollbackUsePoint'], ['rollbackAddPoint']],
            'workflow.order.transition.cancel_return' => [['commitUsePoint'], ['commitAddPoint']],
            // 処理が必要であればここで定義
            // 'workflow.order.transition.cancel_entry' => [],
            // 'workflow.order.transition.cancel_processing' => [],
        ];
    }

決済処理中について

EC-CUBE4では、「決済処理中」ステータスがあり在庫を確保している状態です。

決済途中などで、エラーやサイトを閉じたりして発生しずっと受注が残るので、キャンセルして在庫の調整が必要になる。

カテゴリー
EC-CUBE

【EC-CUBE4】エラーリスト

エラーの解決方法をメモする。

ローカル環境構築関連

WARNING [cache] Failed to save key

事象1:DockerでカスタマイズしたCommand実行で発生した

事象2:AWSとソニーペイメントプラグインを使用していて、cron実行で発生した

原因:AWSのELBを挟んだ場合、REMOTE_ADDRで正しいIPが取得できない

プロジェクト名/app/Plugin/SlnPayment4/Service/Utill.php

修正前ソース

    public function GetLogInfo()
    {        
        $msg = '[{' . $_SERVER['SCRIPT_NAME'] . '}';
        
        $msg .= 'from {' . $_SERVER['REMOTE_ADDR'] . "}\n";
         ・
         ・
         ・

修正後ソース

    public function GetLogInfo()
    {        
        $msg = '[{' . $_SERVER['SCRIPT_NAME'] . '}';

        if(isset($_SERVER['REMOTE_ADDR'])){
            $msg .= 'from {' . $_SERVER['REMOTE_ADDR'] . "}\n";
        } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            // aws_cron対応
            $msg .= 'from {' . $_SERVER['HTTP_X_FORWARDED_FOR'] . "}\n";
        } else {
            // ローカル対応
            $msg .= 'from {' . '['.'localhost'.']' ."\t" . "}\n";
        }

ELB + K8S環境でingress-nginxを通した場合

$_SERVER['HTTP_X_ORIGINAL_FORWARDED_FOR']

参考サイト:https://uiuifree.com/blog/develop/php-elb-ip-address/

No composer.json present in the current directory, this may be the cause of the following exception.

事象:「docker-compose up -d」コマンド実行で発生

原因:composerのバージョンが対応していないのでエラーみたいです。

ファイル名:プロジェクト名/Dockerfile

修正後ソース

RUN curl -sS https://getcomposer.org/installer \
  | php \
  && mv composer.phar /usr/bin/composer \
  && composer selfupdate --1 \ ←これ!!!
  && composer config -g repos.packagist composer https://packagist.jp \
  && composer global require hirak/prestissimo \
  && chown www-data:www-data /var/www \
  && mkdir -p ${APACHE_DOCUMENT_ROOT}/var \
  && chown -R www-data:www-data ${APACHE_DOCUMENT_ROOT} \
  && find ${APACHE_DOCUMENT_ROOT} -type d -print0 \
  | xargs -0 chmod g+s \
  ;

Unable to replace alias “session.handler” with actual definition “session.handler.memcached”

事象:サーバーからPULLしたソースでローカル環境構築

原因:handler_idの設定値が正しくない(古い?)

ファイル名:プロジェクト名/app/config/eccube/packages/framework.yaml

修正後ファイル

framework:
    secret: '%env(ECCUBE_AUTH_MAGIC)%'
    default_locale: '%locale%'
    translator:
      fallback: ['%locale%']
    csrf_protection: { enabled: true }
    http_method_override: true
    trusted_hosts: ~
    # https://symfony.com/doc/current/reference/configuration/framework.html#handler-id
    session:
        # ↓ handler_id: session.handler.memcached ↓
        handler_id: 'Eccube\Session\Storage\Handler\SameSiteNoneCompatSessionHandler'
        save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
        name: '%env(ECCUBE_COOKIE_NAME)%'
        cookie_lifetime: '%env(ECCUBE_COOKIE_LIFETIME)%'
        gc_maxlifetime: '%env(ECCUBE_GC_MAXLIFETIME)%'
        cookie_httponly: true

You have requested a non-existent parameter “kernel.secret”. Did you mean this: “kernel.charset”?

事象:サーバーからプルしたものをローカルで立ち上げようとしたら、発生したエラー

原因:パラメータが定義されているframework.yamlファイルがない

ファイル名:プロジェクト名/app/config/eccube/packages/framework.yaml

作成ファイル

framework:
    secret: '%env(ECCUBE_AUTH_MAGIC)%'
    default_locale: '%locale%'
    translator:
      fallback: ['%locale%']
    csrf_protection: { enabled: true }
    http_method_override: true
    trusted_hosts: ~
    # https://symfony.com/doc/current/reference/configuration/framework.html#handler-id
    session:
        handler_id: 'Eccube\Session\Storage\Handler\SameSiteNoneCompatSessionHandler'
        save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
        name: '%env(ECCUBE_COOKIE_NAME)%'
        cookie_lifetime: '%env(ECCUBE_COOKIE_LIFETIME)%'
        gc_maxlifetime: '%env(ECCUBE_GC_MAXLIFETIME)%'
        cookie_httponly: true

    # When using the HTTP Cache, ESI allows to render page fragments separately
    # and with different cache configurations for each fragment
    # https://symfony.com/doc/current/book/http_cache.html#edge-side-includes
    esi: { enabled: true }
    fragments: { enabled: true }
    php_errors:
        log: true
    assets:
      base_path: '/html/template/%eccube.theme%'
      packages:
        admin:
          base_path: '/html/template/admin'
        save_image:
          base_path: '/html/upload/save_image'
        plugin:
          base_path: '/html/plugin'
        install:
          base_path: '/html/template/install'
        temp_image:
          base_path: '/html/upload/temp_image'
        user_data:
          base_path: '/html/user_data'
        # json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
    cache:
        # this value is used as part of the "namespace" generated for the cache item keys
        # to avoid collisions when multiple apps share the same cache backend (e.g. a Redis server)
        # See https://symfony.com/doc/current/reference/configuration/framework.html#prefix-seed
        prefix_seed: ec-cube
    # The 'ide' option turns all of the file paths in an exception page
    # into clickable links that open the given file using your favorite IDE.
    # When 'ide' is set to null the file is opened in your web browser.
    # See https://symfony.com/doc/current/reference/configuration/framework.html#ide
    ide: ~
    validation: { enable_annotations: true }
    templating: { engines: ['twig'] }

参考サイト

https://github.com/EC-CUBE/ec-cube/blob/4.0.5/app/config/eccube/packages/framework.yaml#L2

Place “2” is not valid for workflow “order”.

事象:注文ステータス追加で発生

原因:ステータス遷移の制御設定が必要

ファイル名:プロジェクト名/app/config/packages/order_state_machine.php

カテゴリー
EC-CUBE

【EC-CUBE4】SQL

便利そうなSQLをメモしていこうと思います。

調査用SQL

共通テンプレート適用

layout_idがないデータは、dtb_page_layoutで設定して確認

USE eccubedb;
SELECT 
 P.id page_id
 ,PL.layout_id
 ,L.layout_name
 ,P.page_name
 ,P.file_name
FROM  dtb_page P
LEFT JOIN dtb_page_layout PL ON P.id = PL.page_id
LEFT JOIN dtb_layout L ON PL.layout_id = L.id;

データ削除

注文データ関連削除SQL

実際に削除する際は、バックアップ取るなど必ず確認して下さい!

USE eccubedb;
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE dtb_cart;
TRUNCATE TABLE dtb_cart_item;
TRUNCATE TABLE dtb_order;
TRUNCATE TABLE dtb_order_item;
TRUNCATE TABLE dtb_shipping;
-- ソニーペイメント
TRUNCATE TABLE plg_sln_order_payment_history;
TRUNCATE TABLE plg_sln_order_payment_status;
-- ソニーペイメント定期購入
TRUNCATE TABLE plg_sln_regular_order;
TRUNCATE TABLE plg_sln_regular_order_item;
TRUNCATE TABLE plg_sln_regular_shipping;
TRUNCATE TABLE plg_sln_regular_order_to_order;
SET FOREIGN_KEY_CHECKS = 1;

外部キー制約の無効化, 有効化

関連するデータがある場合は、削除する順序が正しくない場合はエラーになるので、こちらを入れてます。

SET FOREIGN_KEY_CHECKS = 0;
SET FOREIGN_KEY_CHECKS = 1;
カテゴリー
Ark

【ARK】樹液を簡単に集める方法

樹液の取得方法を載せていきます。

樹液の取得方法

レッドウッドの木で蛇口を設置して、樹液を集める方法があります。

今回は紹介するのは、それ以外の方法です。

樹液の蛇口も取るためのハシゴなどの建造物も不要です。

雪山で樹液

Crystal Islesで確認しましたが、中央の太い木からたまに出ます。

クリスタルワイバーンで取得できました。

ARK_雪山樹液

砂漠で樹液

Crystal Islesで確認しましたが、先端がもさもさしている木からたまに出ます。

Scorched Earthにもあるみたいです。

ARK_砂漠樹液