技術

Vite + Svelte + Tailwind CSS + daisyUI + TypeScript の環境設定

tama-tan

パパッとコマンドなどだけですが、こんな感じで。。。。。。

npm create vite@latest kodawari -- --template svelte-ts
cd kodawari
npm i -D tailwindcss
npm i -D daisyui
npm install
npx tailwindcss init -p

./src/app.css に追加

@tailwind base;
@tailwind components;
@tailwind utilities;

./tailwind.config.cjs を更新

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [],
  theme: {
    extend: {},
  },
  plugins: [],
}

zshの初期設定

tama-tan

ちょっとしたashの設定です。

Homebrewからインストール

brew install zsh

シェル一覧リストを追加

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"

インストールしたzshに設定

chsh -s /usr/local/bin/zsh
Changing shell for ruedap.
Password for ruedap: パスワードを入力する

zsh-completionsのインストール

補完機能の強化

PostgreSQLの自動採番をなおす

tama-tan

シーケンスオブジェクトの値の更新

SELECT MAX(id) FROM table;
SELECT nextval('table_id_seq');
SELECT setval('table_id_seq', (SELECT MAX(id) FROM table));

Nodebrewのインストールと使い方

tama-tan

Nodebrewをインストールする

インストール

brew install nodebrew

確認

nodebrew -v

バージョンが表示されればOK。

.zshrcなどに環境変数を追加 vi ~/.zshrc

export PATH=$HOME/.nodebrew/current/bin:$PATH

初期化

nodebrew setup

バージョン指定してnodeをインストールする インストール可能なバージョンを確認

Wails v2の初期設定

tama-tan

wailsインストール

go install github.com/wailsapp/wails/v2/cmd/wails@latest

ツールのcheck

wails doctor 

初期設定

wails init -n [プロジェクトディレクトリ名] -t [テンプレート名または、url]

wails init -n tamatan -t svelte-ts 

現在バグなのか、フロントエンドの初期化がうまく行かないので yarnまたは、npm installを実行する。 (yarnの方がうまく行くような気がする。)

iOS(obj-c)の画面遷移

tama-tan

・コードでの遷移 ・StoryBoardのsegueを使った遷移 ・NavigationControllerを使った遷移

Present

[self presentViewController:移動先ViewController animated:YES completion:nil];

segue

[self performSegueWithIdentifier:@"セグエのID" sender:self];

Push

[self.navigationController pushViewController:移動先ViewController animated:YES];

Pop

指定ビューコントローラーへ

[self.navigationController popToViewController:viewController animated:YES];

前の画面に戻る

[self.navigationController popViewControllerAnimated:YES];
[self.navigationController popToRootViewControllerAnimated:YES];

StoryBoard

・StoryBoard ID

※storyboardファイルで ‘identify → StoryBoard ID’の入力が必要

iOS(obj-c)のセグエの戻り(push)

tama-tan

1つ前の画面に戻る


[self.navigationController popViewControllerAnimated:YES];

ルート画面まで一気に戻る

[self.navigationController popToRootViewControllerAnimated:YES];

任意の画面(UIViewController)まで戻る

[self.navigationController popToViewController:UIViewController animated:YES];

iOS(obj-c)でgetとPOST

tama-tan

GET

NSString *urlString = [NSString stringWithFormat:@"https://xxxxx.co.jp/test?key1=%@",key1];

    DLog(@"urlString:%@", urlString)

    NSURLSession *urlSession;
    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfig.timeoutIntervalForRequest = 5;
    sessionConfig.timeoutIntervalForResource = 20;

    // 処理を単純化させるためにdelegateは使用しませんでした。
    // UI関連の処理を想定していないため、delegateQueueは独自に作成しました。
    urlSession = [NSURLSession sessionWithConfiguration:sessionConfig
                                               delegate:nil
                                          delegateQueue:nil];

    NSLog(@"get start");

    NSMutableURLRequest *request = [NSMutableURLRequest new];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setValue:@"YKTHttpClient" forHTTPHeaderField:@"User-Agent"];
    [request setHTTPMethod:@"GET"];

    // 取得するデータサイズが小さいのでtaskはNSURLSessionDataTaskを使用
    NSURLSessionDataTask *dataTask
            = [urlSession dataTaskWithRequest:request
                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                NSHTTPURLResponse *httpUrlResponse = (NSHTTPURLResponse *) response;
                                DLog(@"Status code: %ld", httpUrlResponse.statusCode);

                                CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef) [response textEncodingName]);
                                NSString *body = [[NSString alloc] initWithData:data encoding:CFStringConvertEncodingToNSStringEncoding(encoding)];
                                NSData *restoreData = [[NSData alloc] initWithBase64EncodedString:body options:0];

                                NSString *restoreString = [[NSString alloc] initWithData:restoreData encoding:NSUTF8StringEncoding];
                                dispatch_async(
                                        dispatch_get_main_queue(),
                                        ^{
                                            self.textView.text = restoreString;
                                        }
                                );
                            }];

    [dataTask resume];

POST


NSString *urlString =@"https://xxxx.co.jp/test";
    NSDictionary *params = @{
        @"name": name,
        @"uuid": uuid,
        };
    DLog(@"urlString:%@", urlString)

    // 連想配列として与えられたパラメータをクエリ文字列に変換する
    NSData *query = [self buildQueryWithDictionary: params];
    
    
    NSURLSession *urlSession;
    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfig.timeoutIntervalForRequest = 5;
    sessionConfig.timeoutIntervalForResource = 20;

    // 処理を単純化させるためにdelegateは使用しませんでした。
    // UI関連の処理を想定していないため、delegateQueueは独自に作成しました。
    urlSession = [NSURLSession sessionWithConfiguration:sessionConfig
                                               delegate:nil
                                          delegateQueue:nil];

    NSLog(@"get start");

    NSMutableURLRequest *request = [NSMutableURLRequest new];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setCachePolicy:NSURLRequestUseProtocolCachePolicy];
    [request setValue:@"iOS" forHTTPHeaderField:@"User-Agent"];
    [request setHTTPMethod:@"POST"];
    [request setValue: @"application/x-www-form-urlencoded"  forHTTPHeaderField: @"Content-Type"];
    [request setValue: [NSString stringWithFormat: @"%lu", (unsigned long)[query length]]  forHTTPHeaderField: @"Content-Length"];
    [request setHTTPBody: query];
    
    // 取得するデータサイズが小さいのでtaskはNSURLSessionDataTaskを使用
    NSURLSessionDataTask *dataTask
            = [urlSession dataTaskWithRequest:request
                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                NSHTTPURLResponse *httpUrlResponse = (NSHTTPURLResponse *) response;
                                DLog(@"Status code: %ld", httpUrlResponse.statusCode);

                                CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef) [response textEncodingName]);
                                NSString *body = [[NSString alloc] initWithData:data encoding:CFStringConvertEncodingToNSStringEncoding(encoding)];
                                NSData *restoreData = [[NSData alloc] initWithBase64EncodedString:body options:0];

                                NSString *restoreString = [[NSString alloc] initWithData:restoreData encoding:NSUTF8StringEncoding];
                                dispatch_async(
                                        dispatch_get_main_queue(),
                                        ^{
                                        }
                                );
                            }];

    [dataTask resume];

AndroidでgetとPOST

tama-tan

こんな感じ

GET

 public String getHistoryData(String key1) {
        HttpURLConnection urlConnection = null;
        InputStream inputStream = null;
        String result = "";
        String str = "";
        try {
            URL url = new URL("https://xxxxx.co.jp/test?key1=" + key1);
            // 接続先URLへのコネクションを開く.まだ接続されていない
            urlConnection = (HttpURLConnection) url.openConnection();
            // 接続タイムアウトを設定
            urlConnection.setConnectTimeout(10000);
            // レスポンスデータの読み取りタイムアウトを設定
            urlConnection.setReadTimeout(10000);
            // ヘッダーにUser-Agentを設定
            urlConnection.addRequestProperty("User-Agent", "Android");
            // ヘッダーにAccept-Languageを設定
            urlConnection.addRequestProperty("Accept-Language", Locale.getDefault().toString());
            // HTTPメソッドを指定
            urlConnection.setRequestMethod("GET");
            //リクエストボディの送信を許可しない
            urlConnection.setDoOutput(false);
            //レスポンスボディの受信を許可する
            urlConnection.setDoInput(true);
            // 通信開始
            urlConnection.connect();
            // レスポンスコードを取得
            int statusCode = urlConnection.getResponseCode();
            // レスポンスコード200は通信に成功したことを表す
            if (statusCode == 200) {
                inputStream = urlConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
                // 1行ずつレスポンス結果を取得しstrに追記
                result = bufferedReader.readLine();
                while (result != null) {
                    str += result;
                    result = bufferedReader.readLine();
                }
                bufferedReader.close();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // レスポンス結果のJSONをString型で返す
        return str;
    }

POST

public String PostUserName(String key1, String key2) {
        HttpURLConnection urlConnection = null;
        InputStream inputStream = null;
        String result = "";
        String str = "";

        try {
            URL url = new URL("http://hpph;e.cp.jp"");
            // 接続先URLへのコネクションを開く.まだ接続されていない
            urlConnection = (HttpURLConnection) url.openConnection();
            // 接続タイムアウトを設定
            urlConnection.setConnectTimeout(10000);
            // レスポンスデータの読み取りタイムアウトを設定
            urlConnection.setReadTimeout(10000);
            // ヘッダーにUser-Agentを設定
            urlConnection.addRequestProperty("User-Agent", "Android");
            // ヘッダーにAccept-Languageを設定
            urlConnection.addRequestProperty("Accept-Language", Locale.getDefault().toString());
            //ヘッダーにContent-Typeを設定する
            urlConnection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // HTTPメソッドを指定
            urlConnection.setRequestMethod("POST");

            urlConnection.setUseCaches(false);
            //リクエストボディの送信を許可しない
            urlConnection.setDoOutput(true);
            //レスポンスボディの受信を許可する
            urlConnection.setDoInput(true);
            // 通信開始
            urlConnection.connect();


            //ステップ5:リクエストボディの書き出しを行う。
            OutputStream outputStream = urlConnection.getOutputStream();
            Map<String, String> keyValues = new HashMap<>();

            keyValues.put("key1", key1);
            keyValues.put("key2", key2);


            if (keyValues.size() > 0) {
                Uri.Builder builder = new Uri.Builder();
                //HashMapを[key=value]形式の文字列に変換する
                for (String key : keyValues.keySet()) {
                    //[key=value]形式の文字列に変換する。
                    builder.appendQueryParameter(key, keyValues.get(key));
                }
                //[key=value&key=value…]形式の文字列に変換する。
                String join = builder.build().getEncodedQuery();
                PrintStream ps = new PrintStream(outputStream);
                ps.print(join);
                ps.close();
            }
            outputStream.close();

            // レスポンスコードを取得
            int statusCode = urlConnection.getResponseCode();
            // レスポンスコード200は通信に成功したことを表す
            if (statusCode == 200) {
                inputStream = urlConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
                // 1行ずつレスポンス結果を取得しstrに追記
                result = bufferedReader.readLine();
                while (result != null) {
                    str += result;
                    result = bufferedReader.readLine();
                }
                bufferedReader.close();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // レスポンス結果のJSONをString型で返す
        return str;
    }