チャットワークのAPIを使ってみました.プロンプトでほぼ書いています.

2025.07.13

Logging

おはようございます.チャットワークのAPIを使ってみました.プロンプトでほぼ書いたコードになります、チャットGPTの無料版にリファレンスのURLリンクとPHPのクラス化、リターンに$thisで返却出来る所は$thisを使用してスマートにコードを書いてと指示を出しました.

出来上がったコードが下記になります.ソースコードは自分の方でモンキーテスト的に動かしてみましたが、ちゃんと動作するようです.

<?php
class ChatworkClient
{
    private string $apiToken;
    private string $baseUrl = 'https://api.chatwork.com/v2';
    private int $retryCount = 3;
    private int $retryDelay = 1000000; // microseconds

    public function __construct(string $apiToken)
    {
        $this->apiToken = $apiToken;
    }

    public function setRetry(int $count, int $delayMicroseconds): self
    {
        $this->retryCount = $count;
        $this->retryDelay = $delayMicroseconds;
        return $this;
    }

    private function request(string $method, string $path, array $params = []): array
    {
        $attempts = 0;

        while ($attempts < $this->retryCount) {
            $attempts++;

            $ch = curl_init();
            $url = $this->baseUrl . $path;

            if ($method === 'GET' && $params) {
                $url .= '?' . http_build_query($params);
            }

            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            $headers = ['X-ChatWorkToken: ' . $this->apiToken];

            if (in_array($method, ['POST', 'PUT', 'DELETE'])) {
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
                $headers[] = 'Content-Type: application/x-www-form-urlencoded';
            }

            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

            $body = curl_exec($ch);
            $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            $error = curl_error($ch);
            curl_close($ch);

            if ($error) {
                if ($attempts < $this->retryCount) {
                    usleep($this->retryDelay);
                    continue;
                }
                throw new RuntimeException("cURL error after {$attempts} attempts: {$error}");
            }

            if ($status >= 200 && $status < 300) {
                return [
                    'status' => $status,
                    'body' => $body ? json_decode($body, true) : null,
                ];
            }

            if ($attempts < $this->retryCount && $status >= 500) {
                usleep($this->retryDelay);
                continue;
            }

            return [
                'status' => $status,
                'body' => $body ? json_decode($body, true) : null,
            ];
        }

        throw new RuntimeException("Request failed after {$this->retryCount} attempts");
    }

    public function setToken(string $token): self
    {
        $this->apiToken = $token;
        return $this;
    }

    public function me(): array
    {
        return $this->request('GET', '/me');
    }
    public function getMyStatus(): array
    {
        return $this->request('GET', '/my/status');
    }
    public function getMyTasks(array $filters = []): array
    {
        return $this->request('GET', '/my/tasks', $filters);
    }
    public function getContacts(): array
    {
        return $this->request('GET', '/contacts');
    }
    public function getRooms(): array
    {
        return $this->request('GET', '/rooms');
    }
    public function createRoom(array $params): array
    {
        return $this->request('POST', '/rooms', $params);
    }
    public function getRoom(int $roomId): array
    {
        return $this->request('GET', "/rooms/{$roomId}");
    }
    public function updateRoom(int $roomId, array $params): array
    {
        return $this->request('PUT', "/rooms/{$roomId}", $params);
    }
    public function deleteRoom(int $roomId, string $action = 'leave'): array
    {
        return $this->request('DELETE', "/rooms/{$roomId}", ['action_type' => $action]);
    }

    public function getMembers(int $roomId): array
    {
        return $this->request('GET', "/rooms/{$roomId}/members");
    }
    public function updateMembers(int $roomId, array $params): array
    {
        return $this->request('PUT', "/rooms/{$roomId}/members", $params);
    }

    public function getMessages(int $roomId, bool $force = false): array
    {
        return $this->request('GET', "/rooms/{$roomId}/messages", ['force' => $force ? 1 : 0]);
    }

    public function postMessage(int $roomId, string $body, bool $selfUnread = false): self
    {
        $this->request('POST', "/rooms/{$roomId}/messages", ['body' => $body, 'self_unread' => $selfUnread ? 1 : 0]);
        return $this;
    }

    public function markRead(int $roomId): self
    {
        $this->request('PUT', "/rooms/{$roomId}/messages/read");
        return $this;
    }

    public function markUnread(int $roomId): self
    {
        $this->request('PUT', "/rooms/{$roomId}/messages/unread");
        return $this;
    }

    public function getMessage(int $roomId, int $messageId): array
    {
        return $this->request('GET', "/rooms/{$roomId}/messages/{$messageId}");
    }

    public function getRoomTasks(int $roomId, array $filters = []): array
    {
        return $this->request('GET', "/rooms/{$roomId}/tasks", $filters);
    }

    public function createTask(int $roomId, array $params): array
    {
        return $this->request('POST', "/rooms/{$roomId}/tasks", $params);
    }

    public function uploadFile(int $roomId, string $filePath, string $message = ''): array
    {
        if (!file_exists($filePath)) {
            throw new InvalidArgumentException("File not found: {$filePath}");
        }

        $ch = curl_init();
        $url = $this->baseUrl . "/rooms/{$roomId}/files";
        $cfile = curl_file_create($filePath);

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-ChatWorkToken: ' . $this->apiToken]);
        curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => $cfile, 'message' => $message]);

        $body = curl_exec($ch);
        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        if (curl_errno($ch)) {
            throw new RuntimeException(curl_error($ch));
        }

        curl_close($ch);
        return ['status' => $status, 'body' => json_decode($body, true)];
    }
}

人が今回のコードを書いた場合、早い人でも10分ぐらいはコードを書かないといけないと思います、どんなに早くてもそれぐらいの時間は必要だと思いますが、生成AIはこれを数十秒で書ける訳ですから、確実に時間短縮になります.

なので人工知能が使える現場は間違いなく最初のコード出力は人工知能に任せた方が良いです.特に新規案件の土台は生成AIに任せると開発コストは削減出来ます.

明日へ続く

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

```, クラス, コード, コスト, これ, スマート, ソース, それ, チャット, テスト, プロンプト, モンキー, よう, リターン, リファレンス, リンク, ワーク, 下記, 人工, 今回, 使用, 出力, 削減, 動作, 土台, 場合, 必要, 指示, 新規, 明日, 時間, 最初, 案件, 無料, 現場, 生成, 知能, 短縮, 確実, 自分, 返却, 開発, 間違い,

デジタルアドレスAPIのコードを書いてみました.書いたのは

2025.05.30

Logging

おはようございます.デジタルアドレスAPIのコードを書いてみました.書いたのは生成AIだけど一度で上手く正しいコードが生成出来たわけではなくて二、三回の指示出しを行って下記のコードが生成されました.

デジタルアドレスのAPIを使用するには企業もしくは個人事業者で屋号を登録されている方でないとAPIのアカウント登録は今のところ出来ないので、自分はリファレンスと生成AIが出力したコードを見て恐らく正しく処理されるだろうと思ったのでgist.githubに公開しました.

尚、引数にIPアドレスを渡さないといけない所があるけれど、これはサーバーのIPアドレスになります.


<?php

class JapanPostAPIClient
{
    private string $clientId;
    private string $secretKey;
    private string $clientIp;
    private ?string $accessToken = null;
    private ?array $lastResponse = null;

    public function __construct(string $clientId, string $secretKey, string $clientIp)
    {
        $this->clientId = $clientId;
        $this->secretKey = $secretKey;
        $this->clientIp = $clientIp;
    }

    public function authenticate(): self
    {
        $url = 'https://api.da.pf.japanpost.jp/api/v1/j/token';
        $data = json_encode([
            'grant_type' => 'client_credentials',
            'client_id' => $this->clientId,
            'secret_key' => $this->secretKey
        ]);

        $headers = [
            "Content-Type: application/json",
            "x-forwarded-for: {$this->clientIp}"
        ];

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        $response = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpcode !== 200) {
            throw new Exception("Token request failed with status {$httpcode}: {$response}");
        }

        $responseData = json_decode($response, true);
        $this->accessToken = $responseData['token'] ?? null;
        $this->lastResponse = $responseData;

        return $this;
    }

    public function searchCode(string $searchCode, array $params = []): self
    {
        if (!$this->accessToken) {
            throw new Exception("Access token is not set. Please call authenticate() first.");
        }

        $defaultParams = [
            'page' => 1,
            'limit' => 10,
            'choikitype' => 1,
            'searchtype' => 1
        ];

        $queryParams = http_build_query(array_merge($defaultParams, $params));
        $url = "https://api.da.pf.japanpost.jp/api/v1/searchcode/{$searchCode}?{$queryParams}";

        $headers = [
            "Authorization: Bearer {$this->accessToken}",
            "Accept: application/json"
        ];

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode !== 200) {
            throw new Exception("Search request failed with status {$httpCode}: {$response}");
        }

        $this->lastResponse = json_decode($response, true);
        return $this;
    }

    public function getJson(): string
    {
        return json_encode($this->lastResponse, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    }

    public function getArray(): ?array
    {
        return $this->lastResponse;
    }
}

// 使い方の例:
// $client = new JapanPostAPIClient('YOUR_CLIENT_ID', 'YOUR_SECRET_KEY', 'IPアドレス.xxx.xxx.xxx');
// echo $client->authenticate()->searchCode('1000001')->getJson();

明日へ続く

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

```, アカウント登録, アドレス, コード, サーバー, デジタルアドレス, リファレンス, 下記, 企業, 使い方, , 個人事業者, 屋号, 引数, , 指示出し, 正しいコード, 生成, 自分,

PayjpとLaravel

2024.02.16

Logging

おはようございます、Pay.jpで商品支払いとサブスクリプションに対応したコードを書いたので記載しときます。なお、似たようなコードがネットに落ちていると思いますがどうしても似通ってしまいますね。因みにサブスクリプションの場合、Pay.jpの管理画面からサブスクリプション(プラン)の作成して名前付けしないといけません。

また、クレジットカードの記入画面はリファレンスのサンプルから作るのが早いかなって思います。そしてクレジットカードのデモ用コードもPay.jpのリファレンスかドキュメントに記載していますので、そちらを参考にしてください。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Payjp\Payjp;
use Payjp\Charge;
use Payjp\Customer;
use Payjp\Subscription;

class PaymentController extends Controller
{
    //
    public function index()
    {
        return view('payment.index');
    }

    public function payment(Request $request)
    {
        Payjp::setApiKey(config('app.secret_key'));
        // クレカトークンが送られる(tok_xxxxxxxxxxxxxxxxxxxx)
        $token = $request->input('tokenId');
        $result = Charge::create(array(
            "card" => $token,
            "amount" => 3500,
            "currency" => 'jpy',
            'description' => 'ABC商品',
            'product' => 'ABC',
            'metadata' => [
                'user_id'  => '123',
                'user_name'  => 'あいうえお',
                'email' => 'mail@abc.com'
            ]
        ));
        return back();
    }

    public function subindex()
    {
        return view('payment.subscription');
    }

    public function subscription(Request $request)
    {
        $token = $request->input('tokenId');
        Payjp::setApiKey(config('app.secret_key'));
        // 顧客情報の登録
        $customer = Customer::create(array(
            'email' => 'mail@abc.com',
            'card' => $token, // クライアントから受け取ったトークンを記載します。
            'metadata' => [
                'user_id'  => '123',
                'user_name'  => 'あいうえお',
                'email' => 'mail@example.com'
            ]
        ));

        // 課金処理
        $charge = Subscription::create(array(
            'customer' => $customer->id,
            'plan' => 'plan01', // あらかじめpay.jp側に登録しておいた値。
            'metadata' => [
                'user_id'  => '123',
                'user_name'  => 'あいうえお',
                'email' => 'mail@example.com'
            ]
        ));
        return back();
    }
}

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

array, Charge, config, create, Customer, index, input, lt, mail@example.com, namespace AppHttpControllers, PayJP, payment.subscription, request, setApiKey, subindex, subscription, use IlluminateHttpRequest, use PayjpSubscription, サブスクリプション, リファレンス,

Chromeブラウザの拡張機能を新たに作ったお話。 #拡張機能

2022.11.22

Logging

おはようございます、転職活動はあまりしていません😯。

本当なら就職出来ている頃だと思います。なぜならハローワークだけで活動しているので、他のスカウトは無視しているという変な転職活動をしています。今年欲しいという求人は人手不足な会社かなと思いますし、年末押し迫って転職できるとはとても思い難いです。頑張っている事は確かですが、今は難しいという思いもあります。

そんな中でChromeブラウザの拡張機能を新たに作ったお話です、一応、皆さんが使えるようにGさんに申請しました。どんな拡張機能を作ったのかと言えば、サイト内検索が出来る拡張機能です、特に難しいコードなどは使用していませんが、人様の拡張機能は少し不安なので自分で自作した訳です。どんな時に使用するかは人によって違うかも知れませんが、例えばITエンジニアならサイト内のドキュメント検索に使用できるかなって思います。今のリファレンスサイトなどはサイト内検索が出来るようになっているモノのそれでも抜け落ちている部分があるので、それを拡張機能の力で補えるかなと思います。

Chrome拡張サイト内検索機能の動作手順。
サイト内、検索のChrome拡張機能の動作手順。

因みに中のmainコードはこれだけです。コレでサイト内検索を行っています。

document.getElementsByName("txt")[0].addEventListener("keydown", (elm) => {
    if (elm.key === "Enter") {
        chrome.tabs.query({ 'active': true,'lastFocusedWindow': true }, function (tabs) {
            var site = String(tabs[0].url).match(/https?\:\/\/[a-zA-Z0-9|\.|\-]*\/?/)[0].replace(/https?:\/\//,"").replace(/\//,"");
            chrome.tabs.create({
                url:"https://www.google.com/search?q=site" + encodeURI(":"+ site + " " + document.getElementsByName("txt")[0].value)
            });
        });
    }
});

追伸:公開されました。拡張機能はこちら👉

https://chrome.google.com/webstore/detail/site-search/ipemphkmnkbnfonlpmgacnmhnhfimmll/related?hl=ja&authuser=0

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

Chrome, IT, エンジニア, お話, コード, サイト, スカウト, ドキュメント, ハローワーク, ブラウザ, リファレンス, 不安, , , , 人手, 人様, , 今年, , 会社, 使用, , 少し, 就職, 年末, 拡張, , 本当, 検索, 機能, 求人, 活動, 無視, 申請, 皆さん, 自作, 自分, , 転職, ,

そうなんだよなぁそうなんだよ、英語がなぁ。うんうんと頷く。

2020.12.27

Logging

そうなんだよなぁそうなんだよ、英語がなぁ。うんうんと頷く。レベルになりたい。

英語ができない日本人はいっぱいいる、じぶんもその中のひとりで、全然英語ができないのだけど、コレを見ていると英語喋れてある程度、英会話や英語を読み書きができると世界は広がるだろうなと思った。とくに、ITエンジニアは英語は大事になると思う、全然出来なくても大丈夫だけど、世界は広がらないし壁ができると思っている。どんな壁かといえば変数名の名前付けから、英語のドキュメントやリファレンスを理解する速さがかけると、最初は同じスタートラインに立っていた同期ともかなり差が出る。

I will focus on making English content! 今後は英語のみで行きます Breaking the language barrier

これからは間違いなく英語が大事だと、何度も言うけれど英語は大事です。これ意識高い系というより、将来英語が分からなかったら仕事につけない時代にこのままなるだと。日本人の人口が減少していき、外国人を受け入れを続ければ結局そうなるだと思う。そして、特にITエンジニアとしては生きていくには技術的な勉強も大事だと思うけど、基となる英語は大事な要素になるし、そのうち委託するより海外から受託する側に変わることが必ず来るだろうと思います。

50 COMMON ENGLISH PHRASES | MARINA MOGILKO

いま、じぶんはどうやって英語を苦労せずに覚える良い方法はないか探しています、日本語がまぁまぁ喋ることができるのだから、英語もまぁまぁ出来るようになると思っています。「思うは招く」です。出来ると思えばそうなるだと自分は思います。

3 tips for sounding like a native speaker

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

IT, エンジニア, かなり, これ, コレ, じぶん, スタートライン, ドキュメント, ひとり, リファレンス, レベル, 世界, , 人口, 仕事, 何度, 同期, 名前, , 変数, 外国人, 大事, 将来, , 意識, 日本人, 時代, 最初, 減少, 理解, , , 英会話, 英語, 読み書き,

PHPで自前の関数をガッと放り込むとjquery…!!

2017.02.16

Logging


デモサイトはこちらから。
https://zip358.com/tool/kansuu.php
実際、関数を引数に放り込む機会はあまりないかなと思いますが
こういう使い方もできると言う事を覚えておくと便利かなと思います。
この頃jQueryを使うことが多くなってきているのですが
使っているうちにライブラリの作り方がなんとなく理解してきましたので
オリジナルライブラリ(プラグイン)を作ってみようかなと思います。
ちなみにプラグインの作り方を紹介しているサイトがググると
結構あります。たとえば、こちらガッツリと解説しているので
こちらを参考に皆さんもオリジナルプラグインを提供してみてはどうでしょうか?
http://qiita.com/k4zzk/items/11e5dbd53cb93edb8b4d
jqueryは結構好きですが全然というほど書き方やメソッドをしらないですね。
一度、どこかでメソッドに関してはリファレンスなどに目を通しておかないと
いけないなと思う今日このごろです。
リファレンスはこちらから。
http://semooh.jp/jquery/

<?php
function kansuu(){
    return "un!<br>";
}
function ui($f){
  echo $f;
  echo $f;
}
echo 'ui(kansuu());<br>';
ui(kansuu());
class un{
    function kansuu(){
        return "un!<br>";
    }
    function ui($f){
        echo $f;
        echo $f;
    }
    function d($f){
        echo $f->kansuu();
    }
}
$un = new un();
echo '$un->ui($un->kansuu());<br>';
$un->ui($un->kansuu());
echo '$un->d($un);<br>';
$un->d($un);

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

AM, br&gt, class un, echo, function d, function kansuu, function ui, jquery, new un, return, UI, un, オリジナルプラグイン, オリジナルライブラリ, プラグイン, メソッド, リファレンス, 今日このごろ, 作り方, 関数,

phpってオブジェクトの継承ができるだって生意気な( ゚д゚ )

2015.06.19

Logging

<?php
class parentExample
{
    public function parent(){
        return 'parent';
    }
}

class childrenExample extends parentExample
{

    private $echoecho = '';
    public function __construct($yahooo='fuuuuu!')
    {
        $this->echoecho = $yahooo;
    }

    public function children()
    {
        
        return $this->echoecho . 'children';
    }
}

$parentExample = new parentExample();
var_dump($parentExample->parent());

$childrenExample = new childrenExample('Yahooo!!');
var_dump($childrenExample->children());
var_dump($childrenExample->parent());
DEMO https://zip358.com/tool/extends.php

phpってオブジェクトの継承ができるだって生意気なんて(笑)。こういうコードを書く必要性を迫られていなければ・・・どこで使用すればよいのかがわからないという事になると思います。自分自身もこういうコードを書くことが無かったので忘れがちになっていました。ちなみにPHPにもコンストラクタ君がつかえるようです。昔は使えなかったことがPHP5ぐらいから使用できるようになったのは、良いことです・・・・。C++とかJavaとかそういう物をPHPも目指しているだと思います。メソッドも増える一方です、自分が知らないメソッドも結構あると思います。PHP公式のリファレンスを覗けって話ですけど仕事して帰ってきてゴトゴトしてたら、勉?する時間がないですね。作れよという話ですが今のところ作れていないのが現状です。

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

$childrenExample, $echoecho, $parentExample-&gt, Children, construct, demo, fuuuuu, gt;echoecho, lt, parent, parentExample, php, Private, return, Yahooo, リファレンス, , 生意気,

WordPressのプラグインを作るのって結構面倒くさいかも(´Д`)

2015.01.18

Logging


WordPressのプラグイン作成って結構面倒くさいです。自分はWordPressの仕様が
あまり分っていないので、いま勉強中なのですけどCMSって提供先が海外っていう
パターンが多いので情報も英語で書かれていることが多く。英語の分からない自分に
とってはめちゃ苦労するですね。わかる単語を継ぎ接ぎして読み取って「あぁ?」
こんな感じだろうと人様には言えないレベルで要訳して勉強してます。
なんでCMSって結構、理解するまで苦労します。ちなみにWordPressの参考書は
いろいろと出ているのですけど、ほぼ開発には役に立たないものが多い中、
この二冊があるとWordPressの開発が楽になる本を紹介します。
一つ目はWordPressプラグイン開発のバイブルです、タイトル通りこれまさに
手放せないバイブルです!!持っていて損がない本かなと思います。
二つ目はWordPress関数リファレンスガイドです。こちらもタイトル通り
リファレンスガイドです。日本語WordPressの公式サイトにもリファレンスは
掲載しています。この本も持っていないよりある方が何かと役に立ちます。
余談、このサイトの日の訪問者数が200人を突破しましたのでちょっと自慢しときます。
でも200人ってブログで飯を食っている人から言えば微々たる数字なんですけど
自分としてはこの短期間に三桁台に突入した事だけでも案外すごいじゃねと
思っていますトイウコトデ、今後もzip358.comをよろしくお願いします。
※密かに目指せ1万人を目指しています。
※本日8時投稿される記事ですが、めちゃ何かを頑張りました・・・・(誤字脱字がアリそうです)。

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

, CMS, WordPress, WordPressプラグイン開発, WordPress関数リファレンス, zip358.com, タイトル通りこれまさ, トイウコトデ, バイブル, パターン, プラグイン, プラグイン作成, リファレンス, 一つ目, 二つ目, 人様, 参考書, 日本語WordPress, 短期間, 英語, 誤字脱字,